24

我有一些跨项目重用的模板/起点代码。在处理新项目时,我总是想在模板中添加和更改内容。我猜是在项目旁边开发模板。

我的一些添加是特定于项目的,不应该提交给模板。其他人应该。

我敢打赌我可以为此使用 git,但我不确定如何。我有一个用于模板的 git 存储库,每个项目都有一个。我希望将我所做的一些(但不是全部)提交推回模板。我可以制作一个不会被提交回来的文件子集吗?我应该在一个分支中处理特定于项目的事情,而在主分支中处理模板吗?

我真的很感激任何见解。我的 google-fu 收效甚微。

4

3 回答 3

15

我建议专门为您想要进行的任何模板更改创建一个分支。但请确保您从较早的提交之一开始,这样您就不会对模板进行特定于项目的更改。类似的东西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 要做的事情是在项目 repo 中添加模板 repo git remote add template /path/to/template/repo。如果模板分支存在,您可能必须使用-tor-m选项或命令(或其他东西)。git remote set-head template template_branch:master然后您应该能够将您的更改推送到模板存储库git push template template_branch。如果 template_branch 的 head 没有设置属性,你可能需要git push template template_branch:master.

希望这对你有用。玩得开心!

于 2011-04-07T01:31:36.850 回答
0

我也在问自己同样的问题。我主要使用 Django 和 Flask 项目,这会带来无穷无尽的变化(Flask/MongoDB/Vues.js 等)。我也喜欢使用 Docker。因此,我将我倾向于使用的主要变体模板化为 Docker 项目。但是特别是对于 Django,你有一些事情你几乎总是最终会做(运行 startproject/startapp/collectstatic)。

我基本上使用这个答案来为同一个仓库的不同分支提供不同的上游。

要开始一个新项目,我喜欢做什么:

  1. [在本地新建目录]
  2. [在 github 上创建空项目 repo]
  3. git clone [template repo url]
  4. git checkout -b work
  5. git remote add project [project repo url]
  6. git push project work
  7. git branch -u project/work work

所以本质上,我将我的模板存储库克隆到我的新目录中。这给了我一个跟踪我的模板 repo (3) 的分支 master。然后,我立即创建了一个工作分支(我将实际用于项目)(4)。我添加了一个新的遥控器(这是我在 github 上的空项目的仓库)(5)。这是关键 - I push project work,它在新的(之前为空的)项目 repo 上创建了第一个分支。

最后,为了使其永久化,我将分支工作设置为跟踪我项目的 repo 上的分支工作。(6)

Branch master 已经在模板 repo 上跟踪了 branch master,所以你在那里无事可做。

然后,如果我在分支工作并决定要更新我的模板,我可以简单地提交我正在做的任何事情,将分支切换到 master,进行更改并提交推送到我的模板。它将推动起源/主人。或者我可以等待并对我的模板进行一些小的更改,测试它们然后只更新模板。

如果我对项目足够深入(因此不太可能对模板进行进一步的更改),我可以简单地停止跟踪 origin/master 并重新配置项目以拥有一个 master 分支,或者只是作为我的 master 继续工作。

于 2021-01-28T16:48:34.173 回答
0

如果您使用 yarn 或 npm,您可以拥有一个带有他自己的提交历史的模板存储库,然后,将其 fork 用于一个新项目,并使用一个(棘手的)命令,在新的分叉项目中重置提交历史。

我使用纱线 gitinit

包.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 或 yarn,模板中的自定义脚本文件可以完成相同的工作

于 2021-09-28T14:01:56.073 回答