亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

git忽略vs.排除vs.假設不變

git忽略vs.排除vs.假設不變

Git
侃侃爾雅 2019-11-14 10:48:10
我已經多次閱讀了有關此文檔的文檔,但仍然沒有完全理解這些不同命令之間的區別。也許只有我一個人,但是文檔可能更加清晰:http://git-scm.com/docs/gitignorehttps://help.github.com/articles/ignoring-files此外,許多關于該主題的評論似乎在某種程度上松散地使用了“索引”,“提交”,“跟蹤”這兩個詞,這使得這三個之間的區別不太清楚。我目前的(公認的有限)理解:以后.gitignore將不再跟蹤匹配的文件。(盡管它們可能以前已被跟蹤。)這意味著它們永遠不會在git status更改后出現在將來的列表中。 但是,將來的更改仍將與遠程存儲庫同步。換句話說,文件仍然是“索引”的,但它們不是“跟蹤”的。由于.gitignore文件位于項目目錄中,因此可以對文件本身進行版本控制。匹配的文件.git/info/exclude也不會被“跟蹤”。此外,這些文件將永遠不會被遠程同步,因此任何其他用戶都不會以任何形式看到它們。這些文件應該是特定于單個用戶的編輯器或工作流程的文件。由于它位于.git 目錄中,因此exclude文件本身無法版本控制。assume-unchanged在其上運行過的文件也不會顯示在git status或中git diff。這似乎與相似exclude,因為這些文件既沒有“建立索引”也沒有“跟蹤”。但是,之前要提交的文件的最新版本將對存儲庫assume-unchanged中的所有用戶可見。我的問題:以上解釋正確嗎?請糾正我。如果文件已經在提交,什么是它匹配之間的功能不同的.exclude運行 assume-unchanged就可以了?為什么一個人會偏愛一種方法?我的基本用例是,我想避免對已編譯文件的差異進行排序,但是我仍然希望那些已編譯文件與源文件同步。將一個gitignore“d文件仍然推?如果沒有,如何管理已編譯文件的最終部署?在此先感謝您的幫助。
查看完整描述

3 回答

?
慕神8447489

TA貢獻1780條經驗 獲得超1個贊

我將接受Junio Hamano(Git的維護者)通過電子郵件發送的答復,因為我認為它比正式文檔更清楚地解釋了某些事情,并且可以被視為“官方”建議:


.gitignore和.git / info / exclude是調用相同機制的兩個UI。樹內.gitignore將在項目成員之間共享(即,每個在項目上工作的人都應將與其中的忽略模式匹配的路徑視為無效的)。另一方面,.git / info / exclude用于個人忽略模式(即,您在從事項目工作時,將其視為雜項)。


假設不變的機制不應被濫用。這是“我知道我的文件系統操作很慢。我向Git保證,我不會通過使用該位來更改這些路徑的方式-那樣,Git不必每次檢查是否在其中更改了內容我要求輸出“ git status”。除此之外,它沒有其他含義。特別是,Git 不能保證Git始終會認為這些路徑是未修改的--如果Git可以確定標記為假定不變的路徑已更改,而又不會產生額外的lstat(2)成本,則它保留以下權利:報告該路徑 已被修改(因此,“ git commit -a”可以自由提交該更改)。


查看完整回答
反對 回復 2019-11-14
?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

希望不會有太多的信息源被松散地使用,索引和提交,因為它們都是不同的且有意義的。


已建立索引意味著該文件位于git索引中。在過去的某個時候,有人git add在文件上使用過或具有等效命令。該文件已被跟蹤,也可能已提交。

已跟蹤表示git正在監視文件中的更改。跟蹤任何已提交的文件或索引中的任何文件。

提交意味著該文件在git的歷史記錄中。該文件至少有一個檢查點。您可以還原到該文件的任何提交版本。

現在就我所知。我不確定這個定義,但這是我的理解;很高興對此進行糾正:


提交索引文件后,該文件將不再在索引中。下次修改(或刪除)時,它又回到索引中。 索引是與提交的所有跟蹤文件的總和。


索引也稱為緩存或暫存區。


關于您的主要問題。.git / info / exclude與.gitignore相同,只是優先級較低,不在存儲庫中(因此,未提交和共享)。都不會影響已經跟蹤的文件。兩者都會影響當前未跟蹤的文件。在.gitignore之后git add或git commit為時已晚;git已經跟蹤了文件,.gitignore不會對此產生影響。


假定未更改僅影響跟蹤的文件,因此與.gitignore完全分開。它可以暫時假裝該文件未跟蹤并被忽略(但它不一定必須也不能與正常行為有所不同)。就像其他答案提到的那樣,這并不是用來忽略對文件的更改,只是為了潛在地避免在慢速文件系統上進行文件系統操作。


回復:第3點:您不應將編譯文件添加到git中。將文件編譯到源所在的其他目錄,然后忽略整個目錄。將編譯后的文件捆綁到一個庫中,并將其添加到工件存儲庫中,但不要將其放入git中。


查看完整回答
反對 回復 2019-11-14
  • 3 回答
  • 0 關注
  • 1319 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號