我有一些跨项目重用的模板/起始点代码。在处理新项目时,我总是希望在模板中添加和更改内容。在开发项目的同时开发模板,我猜。
我添加的一些内容是特定于项目的,不应该提交到模板中。其他人应该这样做。
我打赌我可以用git来做这件事,但我不确定怎么做。我有一个模板和每个项目的git存储库。我希望我所做的一些提交,但不是全部,被推回到模板中。我可以创建一个没有被提交的文件的子集吗?我是不是应该在一个分支中处理特定于项目的事情,而在主分支中处理模板?
我真的很感谢你的见解。我的google-fu收效甚微。
发布于 2011-04-07 09:31:37
我建议专门为您想要进行的任何模板更改创建一个分支。但请确保您从较早的提交之一开始,这样您就不会对模板进行特定于项目的更改。就像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 remote add template /path/to/template/repo中添加模板存储库。如果模板分支存在,您可能需要使用-t或-m选项或命令git remote set-head template template_branch:master (或其他命令)。然后,您应该能够使用git push template template_branch将您的更改推送到模板存储库。如果template_branch的head没有设置属性,您可能需要git push template template_branch:master。
希望这对你有用。祝你玩得开心!
发布于 2021-01-29 00:48:34
我也在问自己同样的问题。我主要从事Django和Flask项目,这带来了无尽的变化(Flask/MongoDB/Vues.js等)。我也喜欢使用Docker。因此,我已经将我倾向于使用的主要变体作为Docker项目的模板。但特别是在使用Django时,您几乎总是会做一些事情(运行startproject/startapp/collectstatic)。
我本质上使用this answer是为了让同一个repo的不同分支有不同的上游。
要开始一个新项目,我喜欢做的事情是:
git clone [template repo url]git checkout -b workgit remote add project [project repo url]git push project workgit branch -u project/work work上本地创建新目录
所以基本上,我在我的新目录中克隆了我的模板存储库。这为我提供了一个跟踪我的模板存储库的分支主节点(3)。然后,我立即创建一个工作分支(我将在项目中实际使用它) (4)。我添加了一个新的遥控器(这是我的空项目在github上的存储库) (5)。这是key -i push project work,它在新的(在此之前是空的)项目存储库上创建第一个分支。
最后,为了使其成为永久性的,我将分支工作设置为跟踪项目存储库上的分支工作。(6)
分支主节点已经在模板存储库上跟踪了分支主节点,所以您在那里什么都不用做。
然后,如果我在分支工作,并决定我想要更新我的模板,我可以简单地提交我正在做的任何事情,将分支切换到master,对我的模板进行更改和提交推送。它将推送到原点/主站。或者,我可以等待&堆积一些对我的模板的小更改,测试它们&然后只更新模板。
如果我对项目足够深入(因此不太可能进行进一步的模板更改),我可以简单地停止跟踪源/主,并重新配置项目以拥有主分支,或者只保留工作作为我的主分支。
发布于 2021-09-28 14:01:56
如果你使用yarn或npm,你可以有一个模板库和他自己的提交历史,稍后,为一个新项目派生它,并使用一个(棘手的)命令,在新派生的项目中重新设置提交历史。
我用的是纱线gitinit
package.json:
"scripts": {
"gitinit": "git checkout --orphan tmp-master && git add -A && git commit -m 'inicial' && git branch -D master && git branch -m master && git push -f origin master "
}如果您不使用npm或,模板中的自定义脚本文件可以完成相同的工作
https://stackoverflow.com/questions/5572772
复制相似问题