2014-09-02 62 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