web-dev-qa-db-ja.com

リポジトリではなくブランチをフォークする方法は?

リポジトリ全体ではなくブランチをフォークするにはどうすればよいですか?完全なリポジトリではなくブランチ https://github.com/COMSYS/contiki/tree/split-buffer のみをコピーしたい https://github.com/jenshiller/ contikiGitでブランチをフォークする方法 が私の場合機能しません。ブランチを複製したくありません。

9

Github(およびgitのメンタルフレームワーク)では、リポジトリのクローンを作成してフォークします。

ブランチをフォークする方法はありません。それは意味がありません。プロジェクトをforkして、興味のあるブランチで作業してください。そうすることで何も失うことはありません。

「ブランチで作業する」とは通常、

  1. リポジトリのクローン(例:git clone http://repository)、次に
  2. 興味のあるブランチをチェックしてください(git checkout awesome-branchname)、
  3. そして、それに基づいて新しいブランチを作成します(git checkout -b new-even-more-awesome-branch-name
14
Marcus Müller
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を実行する」の省略形です。

0
jthill

まず第一に、マーカスは彼の説明において完全に正しい。フォークできるのはレポだけです。ただし、ローカルでフォークのクローンを作成した後、単一行のパイプコマンドを実行することで、必要な結果を得ることができます。ただし、Github自体が実行する単一ステップの操作ではありません。

最終的に必要なのは、ブランチが1つだけのフォークです。これを取得するには、次のコマンドを実行します。ここでは、フォークのリモート名が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に設定されているわけではないためです。一部はstaging、またはdevelop、または何かを使用しますそれ以外の場合、これは基本的に、リモートのメインブランチがmasterであると仮定するよりも少し柔軟です。リモート側ではHEADブランチを除外する必要があります。メインブランチを削除します。

上記のコマンドを実行すると、リモートに最大2つのブランチが残ることになります。

  1. メインブランチ(この場合、fork/HEADによって参照されるシンボリック参照)
  2. 残しておきたい枝

保持したいブランチもHEADブランチである場合、ブランチは1つだけ残っていることに注意してください。

頻繁に行う場合は、このスクリプトを作成することをお勧めします。 git-delete-all-except.shのような名前を付け、一般化して、リモート名(forkを想定する代わりに)を使用し、保持するブランチのリストを1つだけではなく多分指定します。

これをスクリプトとして持つnotに対する反対の引数:これは危険な操作であり、フォークまたは他のタイプのリポジトリでこれを実行することは絶対に望まないでしょう。オンにして変更をプッシュします!

0
void.pointer