928

プロジェクトのスケルトンを保存するために使用する「スケルトン」というローカル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スケルトンリポジトリがマスタースケルトンリポジトリを追跡する、複数のリポジトリが必要ですか?そして、RubyonRailsスケルトンリポジトリのクローンを作成する個々のプロジェクト。

4

25 に答える 25

1015

注:git1.7.10(2012年4月)では、実際には1つのブランチのみのクローンを作成できます。

# clone only the remote primary HEAD (default: origin/master)
git clone <url> --single-branch

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

<url>リモートリポジトリの場合はURLであり、複製されたブランチ自体を参照しません)

あなたはそれを見ることができますt5500-fetch-pack.sh

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

Tobuは次のように コメントしています。

浅いクローンを作成する場合、これは暗黙的です。
これによりgit clone --depth 1、帯域幅を節約する最も簡単な方法になります。

また、Git 1.9.0(2014年2月)以降、浅いクローンはデータ転送(プッシュ/プル)をサポートしているため、このオプションはさらに便利になりました。
詳細については、「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  

Git 2.26(2020年第1四半期)では、 " git clone --recurse-submodules --single-branch"は、サブモジュールのクローンを作成するときに同じ単一ブランチオプションを使用するようになりました

Emily Shaffer()によるcommit 132f600commit 4731957(2020年2月21日)を参照してください。濱野純雄による合併---コミットb22db262020年3月5日nasamuffin
gitster

clone:-recurse-submodules中に--single-branchを渡します

サインオフ-作成者:Emily Shaffer
Acked-作成者:Jeff King

以前は、「git clone --recurse-submodules --single-branch」を実行すると、スーパープロジェクトが1つのブランチのみを複製した場合でも、サブモジュールがすべてのブランチを複製していました。

--single-branchサブモジュールヘルパーフレームワークをパイプ処理して、clone後で''にします。

于 2012-03-29T07:34:01.897 に答える
686

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

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
于 2011-08-12T02:02:38.673 に答える
115

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)呼び出しも要求されたブランチをダウンロードするだけであるということです。

于 2010-11-10T16:44:50.400 に答える
30

あなたは長い道のりを試すことができます:

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と呼ばれるリモートから必要なブランチのみをフェッチします。
  • 複製したソースブランチを追跡するように設定された新しいブランチを作成してチェックアウトします。

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

于 2009-11-22T08:10:46.470 に答える
26
git clone <url> --branch <branch> --single-branch

URLと支店名を入力するだけです。

于 2017-03-01T10:32:12.957 に答える
25

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

git clone -b branch_name --single-branch project_url local_folder_to_clone_in
于 2015-08-06T06:21:19.090 に答える
18

git-cloneのマニュアルページから:

--single-branchクローン作成中の友達は、--branch <branch name>リモートプライマリHEADのみを使用することを忘れないでください(デフォルトではマスター)

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

于 2013-02-25T13:10:18.013 に答える
9

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

git clone -b BRANCH_NAME --single-branch git@bitbucket.org:___/PROJECTNAME.git
于 2018-03-02T10:18:15.410 に答える
5

ここには、次のような十分な回答があります。

  1. 1つのブランチをダウンロードします(一部を含む--single-branch):

    # (We'll refer to this as "the 1st command" below.)
    # 1. Clone ONLY `branch_name`, then check it out. The `--single-branch` part
    #    means that ONLY `branch_name` is cloned, fetched, pulled, and
    #    tracked. _No other remote branches will be cloned to your PC
    #    whatsoever._
    git clone -b branch_name --single-branch \
    https://github.com/some_project/some_project.git
    

    ...またはそのいくつかのバージョン、およびちょうど言及しているいくつかのバージョン:

  2. すべてのブランチをダウンロードします(--single-branchパーツなし):

    # (We'll refer to this as "the 2nd command" below.)
    # 2. Clone ALL remote branches, then `git checkout` the `branch_name`
    #    branch.
    git clone -b branch_name \
    https://github.com/some_project/some_project.git
    

しかし、私はこれら2つのことを少し詳しく説明し、より身近な同等のコマンドのセットを示して、それぞれの内部で何が起こっているかを確認できるようにしたいと思います。

https://github.com/micronucleus/micronucleus.gitのGitHubに、リモートブランチmasterversion_2.5(これは実際に今すぐ実行できる実際の例です)リモートリポジトリがあると仮定します。

上から2番目のコマンドの内訳:

2番目のコマンドgit clone -b version_2.5 https://github.com/micronucleus/micronucleus.git)は、すべてのリモートブランチをローカルPCにクローンしますが、version_2.5ブランチではなくブランチをチェックアウトしmasterます。その1つのコマンドは、これを行うのと同じです。

git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus  # cd into the repo you just cloned
git checkout version_2.5
# To be pedantic, also delete the local `master` branch since
# technically it won't exist yet since you haven't yet checked
# it out with `git checkout master`, which would create it from
# your locally-stored remote-tracking branch, `origin/master`
git branch -d master

パーツは、の代わりにブランチを-b version_2.5自動的にチェックアウトしました。version_2.5master

git branch -aただし、すべてのブランチがローカルPCに複製されたことを示しています。ここでは、私たちが所属しているローカルブランチversion_2.5、ローカルに保存されているリモートトラッキングブランチ origin/HEAD(を指すorigin/master)、およびorigin/master、を見ることができorigin/version_2.5ます。

$ git branch -a
* version_2.5
  remotes/origin/HEAD -> origin/master
  remotes/origin/master
  remotes/origin/version_2.5

また、参照が何であるかを確認することもできますfetch。ファイルを開いて.git/config直接表示するか、次のコマンドを実行することができgit config remote.origin.fetchます。

$ git config remote.origin.fetch
+refs/heads/*:refs/remotes/origin/*

上記のgit fetchコマンド(これはgit pullと同等であるため、によってトリガーされgit fetch && git mergeます)は、リモートのすべてのブランチのすべてのヘッドをフェッチするように構成されていることがわかりますorigin。私はこの部分の専門家ではありませんが、それが+refs/heads/*:refs/remotes/origin/*意味することだと思います。

上からの最初のコマンドの内訳:

最初のコマンドgit clone -b version_2.5 --single-branch https://github.com/micronucleus/micronucleus.git)は、version_2.5ブランチのみをローカルPCに複製し、それもチェックアウトします。その1つのコマンドは、これを実行するのと同じです(少なくとも、すべてではなく1つのブランチのみを複製するため、最初にダウンロードするデータがはるかに少ないことを除いて、最終結果では):

git clone https://github.com/micronucleus/micronucleus.git
cd micronucleus  # cd into the repo you just cloned
git checkout version_2.5

# Delete ALL other branches, including remote-tracking ones, which are not the 
# `version_2.5` branch:
# One local branch
git branch -d master
# ALL other locally-stored remote-tracking branches
git branch -dr origin/HEAD 
git branch -dr origin/master

# Fix your `.git/config` file so that `git fetch` does the right thing, fetching
# ONLY the `version_2.5` branch head from the `origin/version_2.5` remote branch:
git config remote.origin.fetch \
"+refs/heads/version_2.5:refs/remotes/origin/version_2.5"

この-b version_2.5部分により、デフォルトでブランチversion_2.5の代わりにブランチがチェックアウトさmasterれ(前述のとおり)、その--single-branch部分によって次のことが発生しました。

  1. PCに複製される他のブランチはありません。
  2. git fetchまたはを呼び出したときに他のブランチがフェッチされないように構成する必要がありますgit fetchgit pull

このコマンドは本当に複製され、必要なブランチを1つだけフェッチします。これで完了です。

git branch -aversion_2.5ブランチのみが複製され、チェックアウトされたことを示しています。ここでは、*どのブランチがチェックアウトされているかがわかります。また、ローカルに保存されたリモートトラッキングブランチがあることもわかりorigin/version_2.5ます。

$ git branch -a
* version_2.5
  remotes/origin/version_2.5

また、参照が何であるかを確認することもできますfetch。ファイルを開いて.git/config直接表示するか、次のコマンドを実行することができgit config remote.origin.fetchます。

$ git config remote.origin.fetch
+refs/heads/version_2.5:refs/remotes/origin/version_2.5

上記のように、コマンドはリモートブランチからブランチヘッドgit fetchのみをフェッチします。それでおしまい!他のリモートブランチがフェッチされないことに注意してください。version_2.5origin/version_2.5

概要:

したがって、-b branch_name基本的に使用するbranch_nameと、クローンの後にブランチがチェックアウトされますが、すべてのリモートブランチがクローンされますが、追加--single-branchすると、ONLYbranch_nameがクローン、フェッチ、プル、および追跡されます。他のリモートブランチは、PCに複製されません。

個人的には、すべてのブランチをローカルPCに複製し-b branch_nameたいので、このオプションだけを好みます。唯一の例外は、数十、さらには数百または数千のリモートブランチを持つ巨大な共有モノレポの場合です。その場合は、使用して、気になる1つのメインブランチだけを複製して実行します。たとえば、巨大なモノレポジトリでブランチ用に50 GiBのデータをダウンロードする方が、200 GiBのデータをダウンロードするよりも優れているため、ピアのブランチを2000個もダウンロードできます。-b branch_name --single-branchmaster

参照:

  1. ブランチを1つだけクローンする
  2. Gitでリモートブランチの追跡を停止するにはどうすればよいですか?
于 2020-09-06T06:05:42.860 に答える
4

特定のブランチのクローンを作成するには、次のようにします。

git clone --branch yourBranchName git@yourRepository.git
于 2018-05-23T16:27:27.053 に答える
3

公開鍵を持っていないGitのブランチのクローンを作成するには、次を使用します。

git clone -b <branch> <Git repository URL or clone URL you get from Git repository>
于 2017-08-15T20:19:17.513 に答える
2

コマンドを開きます。

cd folder_name  # enter the path where to clone the branch

たった1つのコマンド:

git clone url_of_projecturltoclone -b branch_name
于 2017-05-02T05:11:36.260 に答える
2

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

とにかく、質問は「別のリポジトリのブランチから新しいプロジェクトを開始する方法」を尋ねているようです。

これに対して、私が使用した解決策は、最初にgithubまたはその他の場所で新しいリポジトリを作成することです。これは、新しいプロジェクトのリポジトリとして機能します。

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

次のコマンドを実行します。

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

これにより、old_branchがnew-repoにプッシュされ、新しいリポジトリのマスターブランチになります。

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

于 2019-06-03T21:17:21.580 に答える
2

フラスコレポを例にとってみましょう。マスターに加えて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ブランチを追跡します。

于 2019-07-31T11:30:27.170 に答える
2

これには主に2つの解決策があります。

  1. -bコマンドスイッチでブランチ名を指定する必要があります。特定のgitブランチのクローンを作成するコマンドの構文は次のとおりです。

    git clone -b <BRANCH_NAME> <GIT_REMOTE_URL>
    

    例:

    git clone -b tahir https://github.com/Repository/Project.git
    

    次のコマンドは、gitリポジトリからブランチtahirのクローンを作成します。上記のコマンドは、特定のブランチのみをクローンしますが、他のブランチの詳細を取得します。コマンドを使用して、すべてのブランチの詳細を表示できます。

    git branch -a
    
  2. フラグを使用--single-branchして、以下のように他のブランチの詳細がフェッチされないようにすることができます。

    git clone -b <BRANCH_NAME> --single-branch <GIT_REMOTE_URL>
    

    例:

    git clone -b tahir --single-branch \ 
    https://github.com/Repository/Project.git
    

    これで、を実行するgit branch -aと、クローンを作成した現在の単一のブランチのみが表示され、すべてのブランチは表示されません。ですから、それはあなたがどのようにそれを望むかによります。

于 2020-02-17T07:32:25.390 に答える
1

浅いクローンが必要な場合は、次の方法でこれを行うことができます。

git clone -b mybranch --depth=1 https://example.com/myproject.git localname

--depth=1を意味し--single-branchます。

于 2020-01-20T23:59:27.760 に答える
1

ブランチをスタンドアロンのままにしておきたい場合は、このコマンドを使用して単一のブランチをgitし、フォルダーの名前を変更できます。

git clone -b [branch-name] --single-branch [url]  [folder_name]

git clone -b mybranch --single-branch git://github/repository.git  project_mybranch
于 2020-05-06T13:23:42.393 に答える
1

これはうまくいくはずです

git clone --single-branch <branchname> <remote-repo-url>
git clone --branch <branchname> <remote-repo-url>
于 2020-12-09T10:38:16.357 に答える
1

️いくつかのパフォーマンス測定️</h1>

提案された2つのアプローチを比較したところ、一方が他方よりもはるかに高速(かつ小型)であることがわかりました(これは、クローンを作成することが唯一の目標であり、他のことをあまり気にしない場合に有利です)。

最も重要なパフォーマンス指標はであることがわかりました。これは、 VonC回答--depthが最速であることを意味します。自分で試してみてください:

time bash -cl "git clone --single-branch --depth=1 --branch=$MYBRANCH $MYGITURL"

私はこれを長い歴史と多くのブランチを持つ大きなプロジェクトでテストしました、そしてこのアプローチは約6秒かかります。

このスレッドのいくつかのコメントで主張されていることとは反対に(少なくとも最近のgitバージョンでは)、これはcheckoutターゲットブランチのみになることに注意してください。git branch -aその単一のブランチのみをリストします。

準優勝

比較すると、frerich-rabeアプローチは一貫して26秒かかりました。

time bash -cl "git init && git remote add -t $MYBRANCH -f origin $MYGITURL && git checkout $MYBRANCH"

2つを比較する場合、私の場合、ターゲットブランチはその親ブランチの大幅にスリム化されたバージョンであることに注意することも重要です。最初のアプローチのダウンロードプログレスバーは、サイズの縮小(<10MB)を反映していますが、2番目のアプローチはそうではありません(> 90MB)。(確かに、合計ダウンロードサイズを測定するためのより成熟した方法がありますが、私はまだそれを調べていません。)

于 2021-11-01T15:04:29.957 に答える
0

@ nosaiba-darwishがここで言ったことと同様:ここ

これは私たちが私たちの会社で通常行うことです:

git clone -b <name_of_branch> --single-branch <git_url> folder_to_clone_locally
于 2020-01-05T04:53:51.710 に答える
0
git clone --branch {branch-name} {repo-URI}

例:

git clone --branch dev https://github.com/ann/cleaningmachine.git
于 2020-05-28T16:20:57.940 に答える
0

私のような初心者の場合は、以下のコードを実行してください

git clone https://gitlab.com/repo/repo.git --branch <name of branch> --single-branch
于 2020-08-25T16:07:18.690 に答える
0

私はこのようにしました

git clone -b <branch_name> url

例 :

git clone -b master https://gitlab.com/jhondoe/applicationproject.git

また

git clone -b master git@gitlab.com:jhondoe/applicationproject.git
于 2021-10-18T05:01:30.690 に答える
0
git clone --single-branch -b [branch name]  [repository URL]
于 2021-10-25T06:50:42.283 に答える
-4

2つのステップで行うことができます

  1. リポジトリのクローンを作成する

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

    git checkout $BranchName
    
于 2015-09-12T18:10:44.897 に答える