![](/img/trans.png)
[英]Equivalence of Perforce “p4 sync -p …@Changelist” in Git
[英]Git equivalence of SVN Changelist?
只是想知道Git是否具有Subversions Changelist功能之類的功能,我發現它可以隨時隨地使用,我知道我可以運行以下功能:
cat 'changelistfileimade' | xargs git update
但很好奇是否也有內置方法嗎?
我為此搜索了更多內容,我想我已經找到了我在上面的評論中提到的TortoiseSVN ignore-on-commit
更改列表用例的替代品。 有問題的命令是git update-index --assume-unchanged <path/name>
。 Git幫助有關於它的說法:
-[無]假設不變
指定這些標志時,為路徑記錄的對象名稱不會更新。 而是,這些選項設置和取消設置路徑的“假定不變”位。 當“假定未更改”位打開時,Git會停止檢查工作樹文件以進行可能的修改,因此您需要手動取消設置該位,以在更改工作樹文件時告知Git。 當在lstat(2)系統調用非常慢的文件系統上處理大型項目(例如cifs)時,這有時會很有用。
此選項也可以用作粗略的文件級機制,以忽略跟蹤文件中未提交的更改(類似於.gitignore對未跟蹤文件所做的操作)。 如果需要修改索引中的該文件(例如合並提交)時,Git將失敗(正常)。 因此,如果假定未跟蹤的文件在上游被更改,則您將需要手動處理這種情況。
我在Nick Quaranto的GitReady博客上找到了對該選項的解釋,其中包括以下內容:
顯然,對此有很多注意事項。 如果您直接
git add
文件,它將被添加到索引中。 合並帶有此標志的提交將導致合並失敗,因此您可以手動進行處理。
但這對我來說只是成功的一半。 下一步是了解您已忽略的內容(並希望記住原因)。 這是由安倍·沃克(Abe Voelker)在一個恰當命名的問題上的方便評論提供的。 只需使用代碼片段編輯.gitconfig
文件
[alias]
ignored = !git ls-files -v | grep "^[[:lower:]]"
如果文件中已經存在[alias]
位,請不要添加它。 現在, git ignored
會告訴您以下信息:
h configs/environment/local.php
h configs/logging/log4php.xml
您可以通過以下幾行使用ignore
和unignore
ignore
別名來更進一步:
ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
我自己從未使用過SVN變更列表 ,但是如果我理解正確,它可以讓您將文件分組到變更列表中 ,然后分別提交這些變更列表。 (對?)
我認為您在Git中確實不需要這樣的功能。 您已經可以分別git add
( git add
)每個文件或文件的一部分( git add -p
)並提交它們。 您可以為每個變更列表創建分支,然后合並/重新設置這些分支。 或者,您可以創建多個提交,然后使用交互式rebase( git rebase -i
)對它們進行重新排序。
不用svn diff --changelist something
,您只需使用git show changelistbranch
。
您不必推那些本地/臨時分支。 除非您考慮將它們准備發布到野外,否則沒人需要看到它們。
您甚至可以為“更改列表分支”命名空間: git branch changelist/name_of_your_changelist
,然后將所有更改列表按其前綴分組。
我想念什么嗎?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.