git (+ LaTeX) branching/merging 工作流程
git (+ LaTeX) branching/merging workflow
当前工作流程
我正在使用 git
来控制我用 LaTeX
写的论文的版本。 我想改进我目前的次优 git
工作流程,因为它需要太多的合并(即它需要时间 + 它会污染日志历史记录)。
目前,我的工作流程如下:
- 我承诺
master
分支 "finalized" 仅发布(即当我向我的主管发送我的工作的当前未损坏版本时);
- 这些提交来自
develop
分支,该分支聚合了多个 feature/x
分支并包含预发布补丁。
- 几个
feature/x
,对应我论文的各个部分,例如:
feature/state-of-the-art
feature/conclusion
feature/page-layout
feature/global-settings
在每个 feature
分支中,我主要只更改一个文件(例如 part/SotA.tex
用于第一个分支)。但是我喜欢与多个分支机构一起工作,这样我就可以更轻松地跟踪在这个或那个方面完成的工作 part/topic.
缺点
但是这个工作流程有一些缺点我想解决:
要对我的工作有一个概览,我必须将每个 feature/x
分支合并到 develop
中。这让我做了很多污染我的历史的合并提交。事实上,我的工作流程实际上看起来像这样(d3
、d4
和 d5
只是为了让我能够全面了解我的工作):
同样,如果我想导入在另一个分支中完成的修改(例如加载一个包),我必须合并回 develop
分支到每个 feature/x
分支:
问题
因此,我希望能够:
- 与其他
feature/x
分支共享 feature/n
分支的更改,
- 能够概览我在
feature/n
分支上的剩余工作(而不是 $git checkout master
+ $git merge feature/n
)
不用那么多合并。
我知道我可以使用更少的分支,但是,如上所述,它们对我很有用,我想保留它们。我认为 rebase -p
可能是一个解决方案,但我对 git
的掌握程度还不足以弄清楚如何继续 - 因为每个 feature/x
分支都源于 develop
并合并到 develop
。
注意:我是这个工作流程中唯一的提交者,所以我可以根据需要重写历史。
To have an overview of my work, I have to merge each feature/x branch into develop.
提交没有什么神圣的。最简单的可能是使用可丢弃的分支名称进行概述,
git checkout -B overview develop; git merge feature/x feature/y feature/z
然后当你看完后就放弃它,检查其他东西。
Similarly, if I want to import modifications done in another branch (e.g. loading a package), I have to merge back the develop branch into each feature/x branch
不啊。我会让加载的包与子模块一起工作,不再担心它,为那些东西准备一个 "packages" 回购协议,只记得 git add
在提交之前设置当前包,或者做它没有子模块,你可以 git rm -r packages; git checkout develop -- packages
复制你想要的版本。对于其他更改、小的路过式修复等,通常 git cherry-pick
甚至 git cherry-pick --no-commit
就是您真正想要的。
当前工作流程
我正在使用 git
来控制我用 LaTeX
写的论文的版本。 我想改进我目前的次优 git
工作流程,因为它需要太多的合并(即它需要时间 + 它会污染日志历史记录)。
目前,我的工作流程如下:
- 我承诺
master
分支 "finalized" 仅发布(即当我向我的主管发送我的工作的当前未损坏版本时); - 这些提交来自
develop
分支,该分支聚合了多个feature/x
分支并包含预发布补丁。 - 几个
feature/x
,对应我论文的各个部分,例如:feature/state-of-the-art
feature/conclusion
feature/page-layout
feature/global-settings
在每个 feature
分支中,我主要只更改一个文件(例如 part/SotA.tex
用于第一个分支)。但是我喜欢与多个分支机构一起工作,这样我就可以更轻松地跟踪在这个或那个方面完成的工作 part/topic.
缺点
但是这个工作流程有一些缺点我想解决:
要对我的工作有一个概览,我必须将每个
feature/x
分支合并到develop
中。这让我做了很多污染我的历史的合并提交。事实上,我的工作流程实际上看起来像这样(d3
、d4
和d5
只是为了让我能够全面了解我的工作):
同样,如果我想导入在另一个分支中完成的修改(例如加载一个包),我必须合并回
develop
分支到每个feature/x
分支:
问题
因此,我希望能够:
- 与其他
feature/x
分支共享feature/n
分支的更改, - 能够概览我在
feature/n
分支上的剩余工作(而不是$git checkout master
+$git merge feature/n
)
不用那么多合并。
我知道我可以使用更少的分支,但是,如上所述,它们对我很有用,我想保留它们。我认为 rebase -p
可能是一个解决方案,但我对 git
的掌握程度还不足以弄清楚如何继续 - 因为每个 feature/x
分支都源于 develop
并合并到 develop
。
注意:我是这个工作流程中唯一的提交者,所以我可以根据需要重写历史。
To have an overview of my work, I have to merge each feature/x branch into develop.
提交没有什么神圣的。最简单的可能是使用可丢弃的分支名称进行概述,
git checkout -B overview develop; git merge feature/x feature/y feature/z
然后当你看完后就放弃它,检查其他东西。
Similarly, if I want to import modifications done in another branch (e.g. loading a package), I have to merge back the develop branch into each feature/x branch
不啊。我会让加载的包与子模块一起工作,不再担心它,为那些东西准备一个 "packages" 回购协议,只记得 git add
在提交之前设置当前包,或者做它没有子模块,你可以 git rm -r packages; git checkout develop -- packages
复制你想要的版本。对于其他更改、小的路过式修复等,通常 git cherry-pick
甚至 git cherry-pick --no-commit
就是您真正想要的。