如何分叉一个分支而不是存储库?

How to fork a branch and not the repository?

我怎样才能 fork 一个分支而不是一个完整的仓库? 我只想复制分支 https://github.com/COMSYS/contiki/tree/split-buffer and not the complete repository https://github.com/jenshiller/contikiHow to fork a branch in Git? 不适用于我的情况。我不想克隆分支。

在 github(以及 git 的思想框架中)您克隆和派生存储库。

无法分叉分支;那没有意义。只需 fork 项目,然后在你感兴趣的分支上工作。这样做你不会失去任何东西。

"Working off a branch"通常表示你

  1. 克隆存储库(例如git clone http://repository),然后
  2. 查看您感兴趣的分支 (git checkout awesome-branchname),
  3. 并以此为基础创建一个新分支 (git checkout -b new-even-more-awesome-branch-name)

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

你想要的最终结果是一个只有 1 个分支的叉子。要得到这个,运行 这个命令。在这里,我假设你的 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

我们这样做的原因是因为并非每个 repo 都将其 HEAD 设置为 master。有些使用 staging,或 develop,或其他。所以这基本上比仅仅假设遥控器的主分支是 master 更灵活一点。我们必须过滤掉远程端的 HEAD 分支,因为您无法远程删除主分支。

运行执行上述命令的最终结果是,您最多将在遥控器上保留两个分支:

  1. 主分支(在本例中,fork/HEAD 引用的符号引用)
  2. 您想保留的分支

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

如果您经常这样做,我建议您为此制作一个脚本。您可以将其命名为 git-delete-all-except.sh 之类的名称,并将其概括为采用远程名称(而不是假设 fork)和可能要保留的分支列表,而不仅仅是一个。

这是一个危险的操作。你绝对不希望 运行 在你或其他人已经积极工作并将更改推送到的叉子或其他类型的回购上!我建议您 对尚未进行任何更改的新分支存储库执行此操作。

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

只克隆主分支,

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

只克隆你想要的特定分支。

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

这里是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 选项只是 shorthand for "do a git fetch afterwards".

我通常选择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 它也很容易做到。