簡體   English   中英

檢查git存儲庫中的特定文件是否已更改

[英]Check if specific file in git repository has changed

我是處理git的新手,但我有一個包含名為'test'的文件的存儲庫。 我想檢查特定文件是否已更改。 反正有嗎?

從大局來看,我正在編寫一個批處理文件,如果發生了任何變化(我已經使用干運行選項找出),它將執行存儲庫的git克隆,除了測試文件外(即使測試文件也是如此)已經改變了,我不想執行git克隆)

如果您需要任何澄清並感謝您的時間,請告訴我

您可以將文件或目錄名稱傳遞給git diff以僅查看對該文件或目錄的更改。

如果您正在“編寫批處理文件”,那么--exit-code切換到git diff可能特別有用。 例如。

git diff --exit-code test

要么:

git diff --exit-code path/to/source/dir

如果對名為test (或任何其他指定文件或目錄)的文件進行更改,則返回1,否則返回0。 (允許腳本在結果上分支。)

要僅查看已更改文件的名稱(而不是完整的差異),請使用--name-only xor,您可以使用-s來完全不輸出,而只使用退出代碼。

運用

git diff test

將顯示工作目錄test和存儲庫版本之間的差異。 使用diff將顯示實際差異; 如果你對這些用途不感興趣

git diff --name-only test

Git不提供查詢遠程存儲庫歷史記錄的方法。 Git命令旨在針對本地存儲庫運行,因此您必須首先clone (如果您之前克隆過一次,則fetch會更便宜)。 也就是說,有一些方法可以解決這個限制:

  • 你可以要求你的Git服務器通過某種API運行你想要的命令。 例如,瀏覽GitHub網頁或使用其開發者API屬於此類別。 在這種情況下,GitHub的Web服務器正在為您運行Git命令。 如果您使用的服務器不是裸Git,請檢查您的服務器是否有可以提供幫助的API。
  • 使用git-archive下載包含存儲庫部分的存檔。 我不認為這會對你有所幫助。

正如Peter Lundgren答案中正確提到的那樣,

git命令旨在針對本地存儲庫運行,

所以git clone很可能會被調用。

另一方面,如果您需要檢查是否要觸發某個特定的CI步驟,您可能會在腳本中找到類似這樣的內容:

if git diff --quiet $COMMIT_HASH^! -- . ':!test'; then
   echo "No significant changes"
else 
   echo "There are some significant changes, let's trigger something..."
fi

--quiet禁用程序的所有輸出並暗示--exit-code (參見git文檔 )。

有關表達式末尾模式的更多詳細信息,請參考此答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM