[英]Make git to track auto-generated files but ignore from diff
我有一個包含源代碼(大多數是*.php
, *.js
)和文檔文件(大多數是*.md
, *.html
, *.svg
)的存儲庫,這些文件是從注釋中自動生成的。 所有文檔都位於存儲庫中的單獨子目錄( ./doc
)中。
一方面,我希望通過git
跟蹤文檔,如果它發生變化,我希望它被提交/推送到服務器,因為它具有可瀏覽和最新文檔,這是很不方便的由github很好地展示。
另一方面,在輸出git diff
命令期間看到自動生成的文件非常煩人。 例如,如果在兩次提交之間更改了一行源代碼,那么git diff
不僅會輸出這一行,而且git diff
輸出所有自動生成的文檔,因為整個自動生成的文檔已經更改。
有沒有辦法如何告訴git跟蹤文檔但默認情況下將其從diff
排除? 如果git將所有文檔文件視為blob,我也會對我好。 然后至少diff
只會聲稱文件已更改,但不會顯示所有文檔行每行。
如果git將所有文檔文件視為blob,我也會對我好。
您可以使用屬性。 只需創建一個包含* -diff
的文件doc/.gitattributes
,然后將該路徑下的所有內容視為diff的二進制文件。 有關詳細信息,請參閱man gitattributes
。
當你想看到它們的差異時,你可以使用git diff --text
來覆蓋它。
我最初建議一個涉及本地修改的解決方案(更新doc/
files的索引( git update-index
)以便不檢測任何diff)
cd doc
git ls-files -z | xargs -0 git update-index --assume-unchanged
但是,OP正確評論:
在
--assume-unchanged
,文件不會包含在提交中,直到我通過--no-assume-unchanged
撤消對索引--no-assume-unchanged
。
因此,我必須保證在每個git diff
之前和之后直接調用它們。我一直在尋找一種更“永久”的解決方案。 一種解決方案,適用於每個用戶在沒有特別注意的情況下檢出存儲庫,並且也可以在Github中工作。
目前我無法真正使用Github的“顯示歷史/差異”功能,因為Github在處理了一定數量的文件后停止顯示差異,不幸的是它只顯示了自動生成的文檔中不相關的更改部分但不是在實際重要的文件中
我同意。
然后另一種選擇是通過以下方式隔離他們自己的倉庫中的所有doc/
文件:
這樣(在git子模塊更新后--init),你可以在主倉庫中工作,並隨時生成文檔:git diff只顯示主(父)倉庫的差異,而不是(倉庫)子模塊) doc/
。
但是當你推送你的主倉庫時,你必須首先添加,提交並推入doc/
(子模塊),然后再添加,提交和推送主倉庫。
這是因為doc/
被主要的repo看作gitlink (一個SHA1, 索引中的特殊條目 ),當你在doc/
提交時會更改,並且需要由引用它的主repo記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.