我有一個存盤庫,其中包含多個檔案夾以及許多子檔案夾和檔案:
/檔案夾1/....
/檔案夾2/....
/檔案夾3/....
每當我更改一個(或多個)時,自動化系統應該 git pull 更改并重新編譯代碼。每個檔案夾都有自己的編譯腳本,編譯每個檔案夾都需要很長時間。有沒有辦法知道,對于我將要提取的更改,修改后的檔案夾是什么,所以我只能運行那些需要的編譯腳本而不是全部?
uj5u.com熱心網友回復:
先獲取:
git fetch
選項1
因此,假設您要檢查當前分支與原始分支相比是否在檔案夾中發生了變化:
$ git diff --quiet HEAD origin/<branch> -- <path/to/dir> || echo changed
例如:
$ git diff --quiet HEAD origin/master -- folder1 || echo changed
如果自最近一次提取以來 folder1 有任何更改,您將在控制臺中看到“已更改”一詞:
changed
選項 2
讓我們看看發生了什么變化:
git diff <branch>...origin/<branch> <path/to/dir>
例如:
git diff master...origin/master folder1
如果指定路徑有變化,Git 會輸出這些變化。然后就可以合并了。
git merge origin/<branch>
之后,您可以編譯專案(如果需要)。
此外
您還可以查看給定檔案夾中的最后 n 次提交是否有更改。為此,您可以運行以下命令:
git log --name-status -n <path/to/dir>
例如:
git log --name-status -2 folder1
這將允許您查看 folder1 檔案夾中最后 2 次提交的更改。
uj5u.com熱心網友回復:
如果將自動化系統插入已知的托管解決方案(例如:github、gitlab、azure devops 的 CI 作業......),您應該能夠獲得“該分支的先前提交是什么?”的資訊。從觸發器中的資料。
檢查您的托管服務的檔案。
僅使用git資料的簡單解決方案:
- 寫下即將被拉取的分支上的當前提交
- 拉動更改
- 檢查新提交和上一次提交之間的差異
假設您從事以下作業master:
# current commit on your branch:
old=$(git rev-parse HEAD)
# pull the changes:
git pull origin master
# check the different files between the two commits:
git diff --name-only $old HEAD
git diff --name-status $old HEAD
從您的問題來看,您似乎只對頂級目錄的差異感興趣,您可能會得到更直接地描述 using 的結果git diff-tree:
git diff-tree --name-only $old HEAD
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/521148.html
標籤:混帐壳
