如何分叉而不是存储库?

时间:2016-07-25 09:46:15

标签: git github git-fork

如何分叉分支而不是完整的存储库? 我希望只复制分支https://github.com/COMSYS/contiki/tree/split-buffer而不是完整的存储库https://github.com/jenshiller/contikiHow to fork a branch in Git?不适用于我的情况。我不想克隆分支。

4 个答案:

答案 0 :(得分:12)

在github(以及git的心理框架中)中,克隆并分叉存储库。

没有办法分叉;这没有意义。只需分叉项目,然后解决您感兴趣的分支机构。您不会因此而失去任何东西。

"在分支机构工作"通常意味着你

  1. 克隆存储库(例如git clone http://repository),然后
  2. 查看您对(git checkout awesome-branchname),
  3. 感兴趣的分支机构
  4. 并根据该分支创建一个新分支(git checkout -b new-even-more-awesome-branch-name

答案 1 :(得分:1)

首先,马库斯的解释完全正确。您只能分叉一个仓库。但是,在本地克隆fork之后,可以通过运行单行管道命令来获得所需的最终结果。不过,这不是Github本身执行的单步操作。

所需的最终结果是其中只有1个分支的fork。为此,请运行此命令。在这里,我假设您的fork的远程名称为fork

git branch -r --list 'fork/*' | \
  grep -v "$(git rev-parse --abbrev-ref fork/HEAD)" | \
  sed 's~fork/~~' | \
  grep -v split-buffer | \
  xargs git push fork --delete

请注意,要使该命令的git rev-parse部分起作用,您必须事先运行此命令:

git remote set-head fork master

我们这样做的原因是因为并非每个回购都将其HEAD设置为master。有些使用stagingdevelop或其他。因此,这基本上比仅假设遥控器的主分支为master更灵活。我们必须过滤掉远程端的HEAD分支,因为您不能远程删除main分支。

运行上述命令的最终结果是,远程上最多将剩下两个分支:

  1. 主分支(在这种情况下,是fork/HEAD所引用的符号ref)
  2. 您要保留的分支

请注意,如果您要保留的分支恰好是HEAD分支,那么您将只剩下1个分支。

如果您经常这样做,我建议为此编写脚本。您可以将其命名为git-delete-all-except.sh之类的名称,并将其通用化为一个远程名称(而不是假设fork),并保留一个分支列表,而不只是一个分支。

not 作为脚本的反论点:这是一个危险的操作,您绝对不希望在您或其他人曾经使用过的fork或其他类型的仓库中运行它积极地已经在努力并将变更推向!!

答案 2 :(得分:0)

git clone --single-branch u://r/l 

仅克隆主分支

git clone -b $branch --single-branch u://r/l

仅克隆所需的特定分支。

但是您不需要该选项,因为git clone本身只是一些简单设置的简写。

这里是git clone u://r/l

git init l; cd $_
git remote add -f origin u://r/l

这是git clone --single-branch -b whatever u://r/l

git init l; cd $_
git remote add -ft whatever origin u://r/l

-f选项只是“事后进行git fetch”的简写。

答案 3 :(得分:0)

我通常会选择How do I clone a single branch in Git?

中所述的选项

git clone <url> --branch <branch> --single-branch [<folder>]

它快速,干净,如果我想create a new repo out of the branch,也很容易做到。