2014-09-02 16 views
1

使用hg,如何在一次更改中替換目錄的內容?hg:在一次更改中替換目錄內容

更具體地說,我有一個大型C++庫的頭文件存入我的倉庫,我想將它們更新(包括添加和刪除文件)到最新版本的庫中。我希望在一次更改中做到這一點,而不是首先刪除舊版本,然後再添加新版本,這會破壞測試併產生無益的差異。

回答

2

如果他們都改變,那麼,(假設平坦的目錄結構:

hg remove \path\to\directory\to\replace\*.h 
copy \path\to\new\files\*.* \path\to\directory\to\replace\ 
hg add \path\to\directory\to\replace\*.* 
hg commit -m "Library SoAndSo headers replaced" 
hg push 

第一行說忘就下的所有文件提交,但隨後新的在同一添加提交 - 請記住只有最後一行實際上更改了存儲庫的本地副本,並且它只在最後一行變成公共狀態

如果您確實有子目錄,那麼您可以在第一行刪除*.hxcopy或資源管理器複製新的di本地結構,並在第三行刪除*.*

+0

你的意思是:hg add \ path \ to \ directory \ to \ replace \? – Taylor 2014-09-02 20:45:53

+0

@泰勒哎呀!是的 - 將修復。 – 2014-09-02 21:01:33

+0

好的,頭文件dir有子目錄。這是如何改變的? – Taylor 2014-09-02 21:03:26

4

在你的善變回購:

# Change to parent directory of your vendor directory 
cd vendor_dir/.. 
rm -rf vendor_dir 
# unpack/copy/checkout new vendor sources into a new vendor_dir 
# Tell mercurial to figure out what changed 
# Feel free to play with the similarity percentage and the (-n) do nothing switch 
hg addremove --similarity 70 vendor_dir 
hg commit vendor_dir 

更新時間:

  1. 改變,因爲hg rm *vendor_dir缺失的父目錄的工作點文件,如果有的話。
  2. hg rm更改爲rm -rf,因爲我錯誤地認爲rm後的addremove會做正確的事情。提示:它沒有。
  3. 認識到100%的默認相似性不適用於供應商發佈。
+0

你確定需要hg rm嗎?它似乎只會導致提交中添加的文件。當我省略它時,我會添加,更改和刪除文件。 – Taylor 2014-09-02 21:22:26

+0

我同意。我不認爲需要'hg rm'命令。只要'hg commit'命令中的'--addremove'參數。 – 2014-09-02 21:36:50

+0

你們是對的。我回去測試,並且addremove不起作用,因爲我認爲它會在hg rm之後。 – Harvey 2014-09-03 01:03:33