我想使用Mercurial复制工作流。这似乎应该是常见的,但我不太清楚如何去做这些魔术。Mercurial自动buld工作流程?
- 用户A创建变更集A1和A2。用户A没有变更集B或C.
- 将A1和A2提交给服务器,将其放入队列中。来自其他用户B和C的变更集在队列中领先。
- 每个变更集(B然后C然后是A1/A2)被自动重新分配到主分支中,构建并接收到主干(或拒绝)中。
- 代码库非常大,所以构建需要很长时间。在此期间A3和A4由用户A生成。
- 用户A进行拉动并获得B',C'和新的A1'/ A2'而不会得到重复。随着发展的继续,A3和A4会移动到行李箱的顶端。
第5步是让我最困难的一个。 “git pull --rebase”似乎意识到变更集是相同的,因此A1/A2消失,而使用Hg则是冲突。我不希望Hg的工作流程完全相同,我只需要某种方式让开发人员能够拉出树干,而不必手动修正其树状结构以便按顺序获取其变更集。如果您的变更集被拒绝,我还需要一些可解释的工作流程来解决如何恢复。有没有人有这种类型的工作流程的经验,可以推荐一种策略?
谢谢
编辑:这是工作流程的模拟器。我当然愿意尝试任何其他工作流程来解决在变更集通过接受并顺利回归时能够继续构建的问题。
rm -rf master
rm -rf build
rm -rf c1
rm -rf c2
rm -rf c3
rm -rf bundles
# Master repository
mkdir master
hg init master
echo x >> master/m1.txt
hg -R master add master/m1.txt
hg -R master commit master/m1.txt -m"m-1"
echo x >> master/m1.txt
hg -R master commit master/m1.txt -m"m-2"
echo x >> master/m1.txt
hg -R master commit master/m1.txt -m"m-3"
# Build repository
hg clone master build
# Setup first client
hg clone master c1
echo x >> c1/client1.txt
hg -R c1 add c1/client1.txt
hg -R c1 commit c1/client1.txt -m"c1-1"
echo x >> c1/client1.txt
hg -R c1 commit c1/client1.txt -m"c1-2"
# Setup second client
hg clone master c2
echo x >> c2/client2.txt
hg -R c2 add c2/client2.txt
hg -R c2 commit c2/client2.txt -m"c2-1"
echo x >> c2/client2.txt
hg -R c2 commit c2/client2.txt -m"c2-2"
# Setup third client
hg clone master c3
echo x >> c3/client3.txt
hg -R c3 add c3/client3.txt
hg -R c3 commit c3/client3.txt -m"c3-1"
echo x >> c3/client3.txt
hg -R c3 commit c3/client3.txt -m"c3-2"
# Create the 3 bundles simulating the queue; all clients have pushed
# Hopefully this is done with a push hook
# All changesets are still draft phase
mkdir bundles
hg -R c2 bundle bundles/c2.bundle
hg -R c3 bundle bundles/c3.bundle
hg -R c1 bundle bundles/c1.bundle
# Process first bundle
hg -R build pull bundles/c2.bundle --rebase
hg -R build update
hg -R build push master
# Client 1 pulls at this point
hg -R c1 pull master -u --rebase
# Process second and third bundle
hg -R build pull bundles/c3.bundle
hg -R build rebase -b 5 -d 4
hg -R build pull bundles/c1.bundle
hg -R build rebase -b 7 -d 6
hg -R build push master
# Client 1 pulls again, getting the changesets that were pushed
hg -R c1 pull master -u --rebase
谢谢。我重读了文档并尝试了它。草稿阶段会让服务器上的事情变得更容易,但这不是我遇到问题的部分。我希望能够将更改发送到服务器,并将它们应用或拒绝,并以自动方式将它们从所有开发人员的变更中拉回到存储库中。我无法弄清楚如何在应用程序中将开发人员的变更集发布给开发人员,而不会在其存储库中留下碎片。即使草稿阶段变更集也不会重新分配,因此开发者仍然有多个重复的变更集。 – Chuckkir
这种看法有些不对(有点正确)。这就是进化扩展为你做的事情:为rebase操作创建合适的过时标记。这些标记*被拉扯,因此没有人会留下“碎片”。 – planetmaker
谢谢;我看到标记是如何工作的。只要没有任何干预拉动,这个过程就会起作用。推,但B,C,D在队列中。 A正在工作,然后拉动,得到B和C.一旦发生这种情况,无论是重新组合还是合并,事情都会变得很糟糕,尽管它有不同的方式。随着rebase过时标记不会消除,这是一个冲突;有了合并修订版本,您必须发展才能达到最终效果。 – Chuckkir