這是一個過程問題,因此可能有多個正確的答案。不過,我會採取任何我現在擁有的東西。不斷合併Mercury中的.hgignore
我的團隊最近已經轉而使用水銀(從Subversion),並在大多數情況下,我們喜歡新的動力。但是,有一些東西會降低生產力。其中之一就是管理.hgignore
文件。
根據既定的文獻和「互聯網上的一些人」:)的建議,我們的團隊保持.hgignore
文件最新,以便hg addremove
始終做正確的事情。此外,缺少需要添加的文件是造成構建失敗的首要原因,所以hg st
僅返回真正需要操作的文件是非常重要的。
的問題是,因爲我們總是添加新的忽略到文件的底部,它總是會導致一個合併衝突如果兩個人做.hgignore
變化。 (大多數人使用TortoiseHg客戶端,這會添加到文件末尾。)這樣做的結果是大約一半的時間文件被更改,更改它的人必須處理合並.hgignore
。這感覺很像是不得不與我們的源代碼控制的內部進行交互。
這是造成開發商不希望將文件添加到.hgignore
,因爲他們知道這將需要以最低的幾個附加分鐘來處理。我們有一個相當大的項目,有一個相當大的團隊正在不斷變化。新的構建工件被相當有規律地引入,所以問題似乎沒有消失。 .hgignore
並不是很穩定,因爲這個項目正在改變很多。 (這本身就是一個不同的問題,當然。)
「正確」的事情是「採取雙方」幾乎總是。從技術上講,兩個人可能已經用文本編輯器修改了完全相同的前一行,但這是不太可能的。不太可能的是,即使'採取兩個'方法失敗,後果也很小。
因此,我把問題提交給社區:我該如何改善這種情況?是否有流程改變可以緩解這種情況?是否有一種工具可以自動採取雙方?我能否以某種方式自動化合並?是否有一個複選框,我可以檢查神奇地解決問題:)?
編輯1:下面是我當前的.hgignore(顯然是編輯版)的版本。您可以輕鬆觀察到正在使用多種不同的技術。代碼的幾個部分正處於從一種技術轉換到另一種技術(例如VB到C#)的過程中。這會導致一組構建工件發生更改,並且需要更新文件。
syntax: glob
*.obj
*.tds
*.map
*.il?
*/obj/*
*/lib/*
*/pch/*
Foo/Engine/frezbat/DocFiles.hpp
Foo/Engine/personal_defines.h
Foo/Engine/revision.cpp
Foo/Engine/frobbish/uLinkHlp.hpp
Foo/Engine/dll/XMLData/**.xml
Foo/Engine/dll/*.syslog
Foo/Engine/dll/*.log
Foo/Engine/dll/Scripts
Foo/Engine/dll/Linked Models
Foo/Engine/dll/prv
Foo/Engine/dll/pub
Foo/Engine/dll/failures.txt
Foo/Engine/dll/users.prm
Foo/Engine/tools/SrvIface/**.dll
Foo/Engine/tools/SrvIface/**.exe
*/dll/*.ini
*/dll/*.exe
*/dll/*.dll
*/quux_obj/*
*.dbg
*~
scripts/backupPath.txt
*.local
*.orig
FooDoc/FooDoc/bin/*
FooDoc/FooDoc/FooDoc.suo
FooDoc/FooDoc/FooDoc.vbproj.user
FooDoc/FooDoc_Setup/Release
Foo/Engine/dll/FooObjects.pdb
Foo/Engine/dll/FooObjects.tlb
Foo/Engine/dll/FooObjects.xml
Foo/Engine/dll/InitechDebugTimer.txt
*.dsk
Foo/Engine/dll/Preferences/CustomToolbar.ini
Foo/Engine/Engine.~dsk
Foo/Engine/dll/ApplicationSettings.fooprefs
Foo/Engine/dll/Foo.cgl
Foo/Engine/dll/IniShare.mem
Foo/Engine/baz_obj/*
Foo/Engine/baz_pch/*
*/dll/*.drc
*.~dsk
InitechBaz/InitechBaz/bin/Debug/InitechBaz.vshost.exe.manifest
InitechBaz/InitechBaz/bin/Debug/InitechBaz.vshost.exe.config
InitechBaz/InitechBaz/bin/Debug/InitechBaz.vshost.exe
InitechBaz/InitechBaz/bin/Debug/InitechBaz.exe.config
scripts/TestComplete/Ottertech_Replay/Log/*
scripts/TestComplete/Ottertech_Replay/[*
relre:ReSharper*
relre:_UpgradeReport_Files
glob:*.suo
glob:*.pdb
*.swp
Foo/Engine/FooObjects/FooObjects/bin/x86/
FooDoc/MCtoDAT/MCtoDAT/bin/x86
FooDoc/Deploy
Foo/Engine/installers/initech-build/bin/*
scripts/TestComplete/Users/*
Foo/Engine/dll/MCtoDAT.xml
FooDoc/Deploy/*
scripts/TestComplete/Ottertech_Replay/Log/*
scripts/TestComplete/Ottertech_Replay/[*
*.orig
Foo/Engine/installers/icon-installers-bin/*
Foo/Engine/Quux/Server/*.esp
Foo/Engine/Quux/BrapServer/*.esp
Foo/Engine/installers/bin/*.exe
Foo/Engine/installers/quux/encryptedsql/*.esp
Foo/Engine/tools/tempfile.tmp
*.pch
*.#*
*.#??
Foo/Engine/dll/frabbing.lib
re:^.*\.\#[0-9][0-9]$
Foo/Engine/Foo/FooObjects/FooObjects/FooObjects.xml
FooDoc/MCtoDAT/MCtoDAT/MCtoDAT.xml
*.sln.cache
FooDoc/TestFooObj/TestFooObj/bin/
*.user
Foo/Engine/FooObjects/FooObjects/FooObjects.xml
Foo/Engine/FooObjects/FooObjects/FooObjects.xml
FooDoc/MCtoDAT/MCtoDAT/MCtoDAT.xml
*/Debug Installer/*.dll
*/Debug Installer/*.tlb
*/Debug Installer/*.xml
*/Debug Installer/*.msi
*/Debug Installer/*.exe
FooDoc/FooDoc_Setup/Debug/*
re:(?i).*\/UpgradeLog.xml
*.sln.cache
你一直在對該文件進行什麼樣的更改?這個文件真的非常罕見。 –
我發佈了文件,以便您可以看到。部分原因在於許多領域正在經歷工具和技術變革。從理論上講,這最終應該會結束,但到那時,我們可能會在不同的領域做類似的事情。 – alficles
好吧,除了壓縮它,例如結合所有bin,obj和.tmp目錄和文件夾等,那麼我想你將不得不保持合併。超越比較是一個非常好的合併工具(在我看來),它有一個「採取行動,然後採取正確的行動」。不是自動的,但很容易做到。可能值得一看。 –