每次在DVCS中进行提交时,从技术上讲,您都是在历史记录中进行分支,每次将其推回到有福的存储库中时,您都会将其集成回去,这是有趣的部分:
- 如果在提交期间没有人进行更改,则它看起来不会像DAG中的分支(有向无环图)
- 如果其他人在提交期间进行了更改,则它看起来像DAG中的分支,只是未命名
还记得Bitbucket / github?中的“ fork”按钮,fork可以看作是分支的同义词,“ fork”按钮的作用只是该存储库到您帐户的克隆。
“克隆到分支”的唯一优点是能够在历史记录的两个点上同时工作,而具有讽刺意味的是,对于您的同事来说,这是一个可以同时在不同分支上工作的通用工作流(而不必来回移动) )。
告诉您的同事学习如何分支,这很容易,这里有一个教程:
D:\>mkdir lol
D:\>cd lol
D:\lol>hg init
D:\lol>hg branch
default
D:\lol>touch lol
D:\lol>hg add lol
D:\lol>hg commit -m "lol"
D:\lol>hg branch lol
marked working directory as branch lol
(branches are permanent and global, did you want a bookmark?)
D:\lol>hg branches
default 0:35d562fafaf2
D:\lol>echo "lol" > lol
D:\lol>hg commit -m "New lol branch"
D:\lol>hg branches
lol 1:9384f923e78d
default 0:35d562fafaf2 (inactive)
D:\lol>hg branch
lol
D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
default
D:\lol>hg update lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
lol
D:\lol>hg update default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
default
D:\lol>hg merge lol
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
D:\lol>hg commit -m "lol merge"
D:\lol>hg branch
default
D:\lol>hg update lol
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branch
lol
当您同时在不同的分支中工作时,或者想要尝试在历史记录中不创建永久分支但仍能够将其集成到现有分支中的情况下进行实验时,“克隆分支”很有意义。
我个人不喜欢这种做法,并且喜欢做分支并在必要时关闭它们。在这里,这是您的操作方式:
D:\lol>hg branches
default 2:46420aca1612
lol 1:9384f923e78d (inactive)
D:\lol>hg branch
lol
D:\lol>hg commit --close-branch -m "Obai, glorious lol branch"
D:\lol>hg branches
default 2:46420aca1612
D:\lol>hg branch
lol
D:\lol>hg update default
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
D:\lol>hg branches
default 2:46420aca1612
D:\lol>hg branches --closed
default 2:46420aca1612
lol 3:4b79c577e029 (closed)
希望这可以消除您对DVCS分支的疑虑,这里的分支不再令人恐惧。