将项目基于“种子”回购的适当git工作流程是什么?

时间:2013-12-04 16:28:38

标签: git github

举个例子:假设您有一个像Angular Seed这样的个人项目(这是Angular项目的起点https://github.com/angular/angular-seed)。

现在您想将其用作项目的起点(比如在线相册)。

您不应该只创建分支,因为您没有对种子项目进行变更。 但如果它是你自己的回购,github将不会让你分叉。

那么创建一个仍然可以从原始种子项目中获取更改的克隆的工作流程是什么?我以为这是一个分叉。

5 个答案:

答案 0 :(得分:27)

我刚刚找到了这个答案https://stackoverflow.com/a/4096529/131227以及评论(git workflow - using one repo as the basis for another),它们共同引导我找到了我喜欢的解决方案。

git clone -o boilerplate ssh://git@github.com/user/proj.git new_proj
-o样板文件将原点重命名为boilerplate,仍可用于从中提取更改。

创建新的空github new_proj repo。 然后
git remote add origin ssh://git@github.com/user/new_proj.git

答案 1 :(得分:4)

你能做的是:

  • 初始化新的回购
  • 将您的角度回购参考为该新回购的 submodule
  • 在你的GitHub空间推送新的repo。

这样,您的新项目就有:

  • 表示种子项目(不修改)的子文件夹
  • 您项目的所有特定数据。

  

我的问题是种子项目不是图书馆。它不存在于项目的子目录中。当你开始时,这是项目,你从那里开始构建。

然后,您回到新回购的简单克隆就足够了 但这不会在你的两个GitHub回购之间保持任何“分叉”关系 您必须通过本地克隆来拉一个并推送到另一个。

答案 2 :(得分:4)

我认为这里正确的答案是使用像Yeoman Generators这样的东西。 (http://yeoman.io/)您希望将git repo与种子项目一起用作生成器。但是,它不允许您不断地从种子项目中获取更改。

使用两个遥控器的解决方案有效,但最终项目将有足够的分歧,这将使这些项目保持同步非常困难。

答案 3 :(得分:2)

选项1:克隆/获取/合并

克隆您选择的种子项目的master分支,例如:

$ git clone -o react-starter-kit -b master --single-branch \
      https://github.com/kriasoft/react-starter-kit.git MyApp
$ cd MyApp

通过运行以下命令,您可以将种子项目中的更新拉回并合并到本地仓库中:

$ git checkout master
$ git fetch react-starter-kit
$ git merge react-starter-kit/master
$ npm install

选项2:clone / pull / diff

克隆种子项目并删除其版本历史记录:

$ git clone https://github.com/kriasoft/react-starter-kit --depth=1
$ git clone https://github.com/kriasoft/react-starter-kit MyApp --depth=1
$ cd MyApp
$ rm -rf .git

然后,每当您需要将种子项目中的最新更新提取回本地仓库时,您可以导航到原始种子项目,提取更新(git pull),然后将该文件夹与项目进行比较文件夹使用一些好的Diff工具(例如Beyond Compare),允许您保存和自定义文件夹比较会话。

答案 4 :(得分:1)

我发现根据this article镜像样板是我工作的唯一方法:

克隆样板并创建新项目:

git clone --mirror https://github.com/mxstbr/react-boilerplate.git
cd react-boilerplate.git
git remote set-url --push origin https://github.com/gitUser/newProject

使用样板文件中的更改更新新项目:

cd react-boilerplate.git
git fetch -p origin
git push --mirror