在开发我的软件时,我创建了一组测试用例,可以通过make tests
自动完成。为了保持井井有条,我将它们放在子目录tests
中。为了保持我的提交井然有序,而不是让我的开发分支混乱,我创建了一个额外的分支tests
,我提交了测试单元。
我的问题是:当我将单元提交到测试分支并切换回开发时,表示测试被删除
D:\Project>hg branch test
D:\Project>edit...
D:\Project>hg add
D:\Project>hg commit
D:\Project>hg up dev
2 files updated, 0 files merged, 3 files removed, 0 files unresolved
我如何保存这些文件? (我尝试了Mercurial: Switch working directory to branch without losing changes?的解决方案,但它仍然删除了文件)
编辑请参阅下面我自己的答案
答案 0 :(得分:4)
这些测试文件在开发分支中不存在,因此当您签出开发分支时,它们将不在工作目录中。像Mercurial和git这样的DVCS不允许您在一个修订/分支处检出一个目录,而在另一个修订/分支处检查另一个目录。
您链接的答案是将更改的文件和他们的文件放到另一个分支中,它们不是您要求的。
所以你想要的方式(单独的分支)不会起作用,但还有很多其他/更好的选择
一种选择是使您的测试成为由mq(Mercurial Queues)存储库管理的补丁,该存储库本身可以进行版本控制。然后,当您在开发分支中的某个位置并且想要运行您要执行的测试时:
hg qpush # tests show up
... run tests, edit tests ..
hg qrefresh # save the changes you made to the test
hg qpop # tests vanish again
MQ很强大,但有时候有点难以绕过你的脑袋。
另一种选择是将您的测试作为父存储库,将实际代码作为该父级的子存储库。您的磁盘布局如下所示:
parent/
tests/
existingrepo/ # <-- the repo you already have w/o tests
然后人们可以克隆,你可以推动现有的没有w / o测试,但外部回购将包括指向它的指针,两个将以锁步方式进行版本控制。再次,有点棘手,但有一些不错的结果。
第三个选项,我的偏好是克服“保持我的提交井井有条而不是混乱我的开发分支”的心态。测试与主代码一样重要,它们应该使用代码进行版本控制,并且它们不会混乱,它们提供了有价值的工具来帮助理解代码正在做什么。您可以随时使用hg log --exclude tests/
查看在方便时将其排除的历史记录。
采取这种做法只是做:
hg update development
hg merge tests
你很高兴。
答案 1 :(得分:2)
当我将单元提交到测试分支并切换回开发时,表示测试被删除
预期和正确的结果:分支存储分歧的开发线,你在测试分支中add
只有 ,在合并之前这个数据只存在于创建分支
为了“保持我的提交井然有序,不要让我的开发分支混乱...”,但是在开发分支中进行测试,你可以使用至少两种方式:
tests
分支合并到development
(测试中的所有更改都将显示在开发中),但仅将日志用于开发分支中的变更集,可能没有测试合并集 。它只是简单的revset,您甚至可以将带有revset的log命令写入别名并在需要时使用别名命令答案 2 :(得分:0)
获得我想要的东西我最终创建了一个repo的子目录:
project/
main.cpp
makefile
.repo/
.hg/
并创建了一个新的make
目标:
REPO := .repo
init: $(REPO) $(REPO)/.hg
$(REPO):
mkdir -p $(REPO)
$(REPO)/.hg:
hg init $(REPO)
commit : | $(REPO) $(REPO)/.hg
ifdef BRANCH
hg -R $(REPO) update -C $(BRANCH)
endif
find . -regex "^\./[^.].*" -exec cp --parents {} ./$(REPO) \;
# the regex prevents "hidden" dot-folder from copying
# one could use --link to save time and drive usage/space
# but i am concerned about hg auto merging and overriding (per hardlink)
# my actual changes
hg -R $(REPO) commit $(EXTRA)
所以我可以发出make commit BRANCH=tests
来提交任意分支,而不会丢失与分支无关的所有更改。实施hg add
作为wipe .repo
,copy file there
hg -R .repo add $(filename)
留给读者作为练习者