web-dev-qa-db-ja.com

Gitで単一のブランチを複製するにはどうすればいいですか?

私はプロジェクトのスケルトンを格納するために使用する 'skeleton'と呼ばれるローカルのGitリポジトリを持っています。さまざまな種類のプロジェクト用にいくつかのブランチがあります。

casey@agave [~/Projects/skeleton] git branch
* master
  Rails
  c
  c++

新しいプロジェクトのマスターブランチをチェックアウトしたい場合は、

casey@agave [~/Projects] git clone skeleton new
Initialized empty Git repository in /Users/casey/Projects/new/.git/

そして、すべてが私がそれを望んでいる方法です。具体的には、新しいマスターブランチがスケルトンマスターブランチを指しているので、基本プロジェクト設定への変更を回避するためにプッシュアンドプルできます。

しかし、うまくいかないのは、別のブランチを複製したい場合です。私が欲しいブランチ、例えばRailsブランチだけを引っ張るように手に入れることができないので、新しいリポジトリにはデフォルトでスケルトンリポジトリのmasterブランチにプッシュし、そこから引っ張るRailsブランチがあります。

これを実行するための良い方法はありますか?あるいは、これはGitが私に物事を構造化させることを望んでいる方法ではないかもしれません、そして私は確かにそれにオープンです。 Ruby on Railsスケルトンレポジトリがマスタースケルトンレポジトリを追跡している状態で、複数のレポジトリを持つべきでしょうか。そして、Ruby on Railsスケルトンリポジトリを複製する個々のプロジェクト。

692
Casey Rodarmor

注:git1.7.10 (2012年4月) を使用すると、実際に 1つのブランチのみを複製することができます

# clone only the remote primary HEAD (default: Origin/master)
git clone --single-branch

as in:
git clone <url> --branch <branch> --single-branch [<folder>]

t5500-fetch-pack.sh に見ることができます。

test_expect_success 'single branch clone' '
  git clone --single-branch "file://$(pwd)/." singlebranch
'

東武コメント that:

浅いクローンを作成するときに暗黙的に指定されます。
これはgit clone --depth 1を帯域幅を節約する最も簡単な方法にします。

そして、Git 1.9.0(2014年2月)以降、浅いクローンはデータ転送(Push/pull)をサポートしています。そのため、このオプションは現在さらに有用です。
git clone --depth 1(シャロークローン)は、実際よりも便利ですか? 」を参照してください。


浅いクローンを「元に戻す」には、「 浅いクローンを完全なクローンに変換する 」(git 1.8.3以降)をご覧ください。

# unshallow the current branch
git fetch --unshallow

# for getting back all the branches (see Peter Cordes' comment)
git config remote.Origin.fetch refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow

として クリス コメント:

足りない枝を取得して--single-branchを元に戻すための魔法の行は(git v2.1.4)です。

git config remote.Origin.fetch +refs/heads/*:refs/remotes/Origin/*
git fetch --unshallow  
735
VonC

一つの方法は以下を実行することです。

git clone user@git-server:project_name.git -b branch_name /your/folder

branch_nameはあなたが選んだブランチで、 "/ your/folder"はそのブランチの保存先です。これは他のブランチがあなたに行ったり来たりする機会を与えてくれることは事実です。今、Git 1.7.10から始めて、これを実行できます。

git clone user@git-server:project_name.git -b branch_name --single-branch /your/folder
650
Alex Nolasco

Gitバージョン1.7.3.1(Windows上)を使用して、以下を実行します($BRANCHはチェックアウトしたいブランチの名前、$REMOTE_REPOはクローンを作成したいリモートリポジトリのURLです)。

mkdir $BRANCH
cd $BRANCH
git init
git remote add -t $BRANCH -f Origin $REMOTE_REPO
git checkout $BRANCH

このアプローチの利点は、後続のgit pull(またはgit fetch)呼び出しも要求されたブランチをダウンロードするだけで済むことです。

106
Frerich Raabe

長い道のりを試すことができます。

mkdir newrepo.git
cd newrepo.git
git init
git remote add Origin file:///path/to/original
git fetch Origin branchiwant:refs/remotes/Origin/branchiwant
git checkout -b branchiwant --track Origin/branchiwant

これが何をするものです:

  • 空のGitリポジトリを作成して初期化します。
  • 元のリポジトリを Origin という名前のリモートとして追加します。
  • Origin というリモートから必要なブランチだけを取得します。
  • 複製したばかりのソースブランチを追跡するように設定された新しいブランチを作成してチェックアウトします。

うまくいけば、それはあなたがしているもののようなものになるでしょう。

26
jkp

下記のコマンドを使用してそれを行うことができます。

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
18
nosaiba darwish

git-cloneのmanページ から:

--single-branchはクローン作成中のあなたの友人です--branch <branch name>と一緒に使うのを忘れないでください。そうでない場合はリモートプライマリHEADのみがクローンされます(デフォルトでmaster)

常にすることを忘れないでください Ctrl + F5 キャッシュからのものではなく、新鮮なソースを読むために:-)(私はこのオプションについて長い間知りませんでした。)

15
Casey
git clone <url> --branch <branch> --single-branch

URLとブランチ名を入れるだけです。

11
Jitendra

ブランチを1つだけ複製します。これが最も簡単な方法です。

$ git clone -b BRANCH_NAME --single-branch [email protected]:___/PROJECTNAME.git
5
Cubiczx

公開鍵を持っていないGitのブランチを複製するには、これを使います。

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
2
Prem S

特定のブランチを複製するには、次のようにします。

git clone --branch yourBranchName [email protected]

2
nPcomp

少し遅れましたが、この問題を解決するために使用したソリューションを追加したいと思いました。解決策を見つけました ここ

とにかく、質問は「他のレポの支店から新しいプロジェクトを開始する方法」を尋ねているようです。

これに対して、私が使用した解決策は、まずgithubで、あるいはどこにでも新しいリポジトリを作成することです。これはあなたの新しいプロジェクトへのレポとして役立つでしょう。

ローカルマシン上で、新しいプロジェクトのテンプレートとして使用するブランチがあるプロジェクトに移動します。

コマンドを実行します。

git Push https://github.com/accountname/new-repo.git +old_branch:master

これが何をするかはold_branchをnew-repoにプッシュし、それを新しいリポジトリのマスターブランチにすることです。

その後、新しいリポジトリを新しいプロジェクトのローカルディレクトリに複製するだけで、新しいプロジェクトが古いブランチから開始されます。

1

flask repoの例を見てみましょう。マスターに加えて3つのブランチがあります。 1.1.xリモートブランチをチェックアウトしましょう

gitリポジトリのクローンを作成します

git clone https://github.com/pallets/flask

リポジトリにcdします。

cd flask

リモートブランチ1.1.xを取得する

git fetch Origin 1.1.x

ブランチをチェックアウトする

git checkout 1.1.x

ブランチ1.1.xに切り替えて、リモート1.1.xブランチを追跡します。

0

Cmdを開きます。

cd folder_name(ブランチを複製する場所のパスを入力)

たった一つのコマンド:

git clone url_of_projecturltoclone -b branch_name
0
dhS

2ステップでできる

  1. リポジトリを複製する

    • git clone <http url>
  2. 必要なブランチをチェックアウトする

    • git checkout $BranchName
0
Pramod Setlur