我有一些模板/起点代码,我在项目中重复使用。在处理新项目时,我总是想在模板中添加和更改内容。 我想,与项目一起开发模板。
我的一些新增功能是特定于项目的,不应该提交给模板。其他人应该。
我打赌我可以使用git,但我不确定如何。我有一个模板的git存储库和每个项目的一个存储库。我想要一些,但不是全部,我做的提交被推回到模板。我可以制作一些未提交的文件子集吗?我应该在一个分支中处理特定于项目的事物而在主分支中处理模板吗?
我非常感谢任何见解。我的google-fu产量很少。
答案 0 :(得分:12)
我建议专门为您想要进行的任何模板更改创建一个分支。但请确保从之前的某个提交中启动它,因此您不会对模板进行特定于项目的更改。像git checkout -b template_changes EARLY_COMMIT_SHA
这样的东西。
然后,您已经进行了任何模板更改,您可以选择:git cherry-pick TEMPLATE_CHANGE_SHA
。
您希望对模板进行的任何更改都可以在模板分支上完成并合并到项目的其他分支中;但如果你足够远,你可能想切换到模板项目。
要将模板更改从项目推送到模板git存储库,您可以执行git format-patch SHA_FROM_WHERE_TEMPLATE_BEGAN
。这将创建一堆补丁文件,您必须将其复制到模板仓库并运行git apply 0001-... 0002-...
以应用补丁,但这不是很有趣。
更多git-fu要做的事情是在项目仓库git remote add template /path/to/template/repo
中添加模板仓库。如果存在模板分支,则可能必须使用-t
或-m
选项或命令git remote set-head template template_branch:master
(或其他内容)。然后,您应该能够使用git push template template_branch
将更改推送到模板仓库。如果template_branch的头部未设置属性,则可能必须git push template template_branch:master
。
希望这对你有用。玩得开心!
答案 1 :(得分:0)
我也在问自己同样的问题。我主要使用 Django 和 Flask 项目,这会带来无穷无尽的变化(Flask/MongoDB/Vues.js 等)。我也喜欢与 Docker 一起工作。所以我已经将我倾向于使用的主要变体模板化为 Docker 项目。但尤其是在使用 Django 时,您几乎总是会做一些事情(运行 startproject/startapp/collectstatic)。
我基本上使用 this answer 来说明为同一个 repo 的不同分支设置不同的上游。
开始一个新项目,我喜欢做什么:
git clone [template repo url]
git checkout -b work
git remote add project [project repo url]
git push project work
git branch -u project/work work
所以本质上,我在我的新目录中克隆了我的模板存储库。这给了我一个跟踪我的模板 repo (3) 的分支 master。然后,我立即创建一个工作分支(我将实际用于项目)(4)。我添加了一个新的遥控器(这是我在 github 上的空项目的存储库)(5)。这是关键 - I push project work
,它在新的(之前是空的)项目存储库上创建第一个分支。
最后,为了使其永久化,我将分支工作设置为跟踪我项目存储库上的分支工作。(6)
Branch master 已经在模板 repo 上跟踪了 branch master,所以你没有什么可做的。
然后,如果我在分支工作并决定要更新我的模板,我可以简单地提交我正在做的任何事情,将分支切换到 master,进行更改并提交推送到我的模板。它会推动原点/主。或者我可以等待并对我的模板进行一些小的更改,测试它们,然后只更新模板。
如果我对项目足够深入(因此不太可能对模板进行进一步更改),我可以简单地停止跟踪 origin/master 并重新配置项目以拥有一个 master 分支,或者继续作为我的 master 工作。< /p>