4516

とブランチがmasterあり、どちらもGitHubdevelopmentにプッシュされています。d、ed、およびedを実行しましたが、ブランチ以外は何も取得できません。clonepullfetchmaster

明らかな何かが欠けていると確信していますが、マニュアルを読みましたが、まったく喜びがありません。

4

45 に答える 45

4942

まず、リモートGitリポジトリのクローンを作成し、そこにcdします。

$ git clone git://example.com/myproject
$ cd myproject

次に、リポジトリ内のローカル ブランチを確認します。

$ git branch
* master

しかし、あなたのリポジトリには他のブランチが隠されています! -aフラグを使用してこれらを確認できます。

$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental

上流のブランチをちょっと覗き見したいだけなら、直接チェックアウトできます:

$ git checkout origin/experimental

ただし、そのブランチで作業したい場合は、ローカル追跡ブランチを作成する必要があります。これは、次の方法で自動的に行われます。

$ git checkout experimental

そしてあなたは見るでしょう

Branch experimental set up to track remote branch experimental from origin.
Switched to a new branch 'experimental'

ここで「新しいブランチ」とは、ブランチがインデックスから取得され、ローカルに作成されることを意味します。の行が示すように、ブランチはリモート ブランチを追跡するように設定されています。これは通常、origin/branch_name ブランチを意味します。

ここで、ローカル ブランチを見ると、次のように表示されます。

$ git branch
* experimental
  master

を使用して、実際には複数のリモート リポジトリを追跡できますgit remote

$ git remote add win32 git://example.com/users/joe/myproject-win32-port
$ git branch -a
* master
  remotes/origin/HEAD
  remotes/origin/master
  remotes/origin/v1.0-stable
  remotes/origin/experimental
  remotes/win32/master
  remotes/win32/new-widgets

この時点で、事態はかなりおかしくなっているので、実行gitkして何が起こっているかを確認してください。

$ gitk --all &
于 2008-09-16T13:28:22.230 に答える
900

一度に取得したいリモート ブランチが多数ある場合は、次のようにします。

git pull --all

これで、リモート リポジトリにアクセスすることなく、必要に応じて任意のブランチをチェックアウトできるようになりました。


注:これにより、チェックアウトされていないブランチの作業コピーは作成されません。これは、質問が求めていたものです。そのためには、

于 2011-01-13T16:42:40.067 に答える
517

このBashスクリプトは私を助けてくれました:

#!/bin/bash
for branch in $(git branch --all | grep '^\s*remotes' | egrep --invert-match '(:?HEAD|master)$'); do
    git branch --track "${branch##*/}" "$branch"
done

master (おそらく元の clone コマンドから取得したもの) を除く、すべてのリモート ブランチの追跡ブランチを作成します。私はあなたがまだする必要があるかもしれないと思う

git fetch --all
git pull --all

念のため。

ワンライナーgit branch -a | grep -v HEAD | perl -ne 'chomp($_); s|^\*?\s*||; if (m|(.+)/(.+)| && not $d{$2}) {print qq(git branch --track $2 $1/$2\n)} else {$d{$_}=1}' | csh -xfs
いつものように:私たちが知っているように、 rm -rf 宇宙をコピーする前にセットアップでテストしてください

ワンライナーのクレジットはユーザー cfi に送られます

于 2011-01-21T02:18:36.200 に答える
437

--mirrorオプションを使用すると、remote追跡ブランチが適切にコピーされるようです。ただし、リポジトリを裸のリポジトリとして設定するため、後で通常のリポジトリに戻す必要があります。

git clone --mirror path/to/original path/to/dest/.git
cd path/to/dest
git config --bool core.bare false
git checkout anybranch

参照: Git FAQ: リモートで追跡されたすべてのブランチを含むリポジトリをクローンするにはどうすればよいですか?

于 2011-08-27T17:49:44.263 に答える
244

派手な「git checkout -b somebranch origin/somebranch」構文を使用せずに、簡単にブランチに切り替えることができます。できるよ:

git checkout somebranch

Git は自動的に正しいことを行います。

$ git checkout somebranch
Branch somebranch set up to track remote branch somebranch from origin.
Switched to a new branch 'somebranch'

Git は、同じ名前のブランチが 1 つのリモートに存在するかどうかを確認し、存在する場合は、リモート ブランチであることを明示的に指定した場合と同じ方法で追跡します。Git 1.8.2.1 の git-checkout man ページから:

<branch> が見つからないが、正確に 1 つのリモート (<remote> と呼ぶ) に一致する名前を持つ追跡ブランチが存在する場合は、次のように扱います。

$ git checkout -b <branch> --track <remote>/<branch>
于 2012-05-12T12:11:54.240 に答える
101

それにかんする、

gitcheckout-b実験的起源/実験的

を使用して

git checkout -t origin/experimental

またはより冗長ですが、覚えやすいです

git checkout --track origin/experimental

リモートリポジトリを追跡するという点では、より良いかもしれません。

于 2009-07-27T06:10:37.503 に答える
82

実行しているフェッチはすべてのリモートブランチを取得する必要がありますが、それらのローカルブランチは作成されません。gitkを使用する場合、「remotes / origin/dev」または同様のものとして記述されたリモートブランチが表示されるはずです。

リモートブランチに基づいてローカルブランチを作成するには、次のようにします。

git checkout -b dev refs/remotes/origin/dev

これは次のようなものを返すはずです:

Branch dev set up to track remote branch refs/remotes/origin/dev. Switched to a new branch "dev"

これで、devブランチにいるとき、「gitpull」はローカルdevをリモートdevブランチと同じポイントに更新します。すべてのブランチをフェッチしますが、ツリーの一番上にあるブランチのみをプルすることに注意してください。

于 2008-09-15T22:52:51.197 に答える
72

エイリアスを使用します。ネイティブの Git ワンライナーはありませんが、独自のものを次のように定義できます。

git config --global alias.clone-branches '! git branch -a | sed -n "/\/HEAD /d; /\/master$/d; /remotes/p;" | xargs -L1 git checkout -t'

そしてそれを次のように使用します

git clone-branches
于 2013-05-15T11:02:27.247 に答える
66

これを行う最良の方法は次のとおりです。

mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard

この時点で、すべてのブランチを含むリモート リポジトリの完全なコピーが作成されます ( で確認しgit branchます)。リモートリポジトリに独自のリモートがある場合は、--mirror代わりに使用できます。--bare

于 2012-11-26T23:42:29.080 に答える
64

「gitclonegit:// location」を実行すると、すべてのブランチとタグがフェッチされます。

特定のリモートブランチ上で作業するには、それが元のリモートであると想定します。

git checkout -b branch origin/branchname
于 2008-09-15T22:47:00.603 に答える
58

「マスター」しか見えない理由

git cloneすべてのリモート ブランチをダウンロードしますが、ファイルが新しいリポジトリに配置されていても、それらは「リモート」と見なされます。これには例外が 1 つあります。それは、複製プロセスが「マスター」と呼ばれるリモート ブランチから「マスター」と呼ばれるローカル ブランチを作成することです。デフォルトでgit branchは、ローカル ブランチのみが表示されるため、「マスター」のみが表示されます。

git branch -aリモート ブランチを含むすべてのブランチを表示します。


ローカルブランチを取得する方法

実際にブランチで作業したい場合は、おそらくその「ローカル」バージョンが必要になるでしょう。リモート ブランチからローカル ブランチを単純に作成するには(それらをチェックアウトして作業ディレクトリの内容を変更する必要はありません)、次のようにします。

git branch branchone origin/branchone
git branch branchtwo origin/branchtwo
git branch branchthree origin/branchthree

この例でbranchoneは、 は に基づいて作成するローカル ブランチの名前ですorigin/branchone。別の名前でローカル ブランチを作成したい場合は、次のようにします。

git branch localbranchname origin/branchone

ローカル ブランチを作成したら、それを表示できますgit branch(ローカル ブランチを表示する必要がないことを思い出して-aください)。

于 2014-03-05T13:47:03.530 に答える
39

これを行うだけです:

$ git clone git://example.com/myproject

$ cd myproject

$ git checkout branchxyz
Branch branchxyz set up to track remote branch branchxyz from origin.
Switched to a new branch 'branchxyz'

$ git pull
Already up-to-date.

$ git branch
* branchxyz
  master

$ git branch -a
* branchxyz
  master
  remotes/origin/HEAD -> origin/master
  remotes/origin/branchxyz
  remotes/origin/branch123

ご覧のとおり、「git clone git://example.com/myprojectt」はブランチも含めてすべてを取得します。それらをチェックアウトするだけで、ローカル ブランチが作成されます。

于 2011-05-31T11:40:02.647 に答える
31

すべてのブランチを取得するには、「git clone」を使用するだけです。

git clone <your_http_url>

master ブランチしか表示されませんが、「git branch -a」を使用してすべてのブランチを表示できます。

git branch -a

そして、すでに持っているブランチに切り替えることができます。

git checkout <your_branch_name>

「git clone」を実行した後は、リモート リポジトリに接続する必要はありません。「git branch -a」と「git checkout <your_branch_name>」は、インターネットに接続していない場合でも正常に実行できます。したがって、「git clone」を実行すると、リモート リポジトリからすべてのブランチが既にコピーされていることが証明されます。その後、リモート リポジトリは必要ありません。あなたのローカルにはすでにすべてのブランチのコードがあります。

于 2014-11-19T15:43:04.407 に答える
27

Agit cloneはリポジトリ全体をコピーすることになっています。クローンを作成してから、を実行してくださいgit branch -a。すべてのブランチをリストする必要があります。次に、「master」ではなくブランチ「foo」に切り替えたい場合は、を使用しますgit checkout foo

于 2008-09-15T22:46:08.450 に答える
19

私のツールgit_remote_branchgrb)を使用してください。マシンにRubyをインストールする必要があります)。これは、リモートブランチ操作を非常に簡単にするために特別に構築されています。

ユーザーに代わって操作を行うたびに、コンソールに赤で印刷されます。時間が経つにつれて、彼らは最終的にあなたの脳に固執します:-)

grbに代わってコマンドを実行させたくない場合は、「説明」機能を使用してください。コマンドは、実行されるのではなく、コンソールに出力されます。

最後に、すべてのコマンドには、暗記を容易にするためのエイリアスがあります。

これはアルファソフトウェアであることに注意してください;-)

grbhelpを実行するときのヘルプは次のとおりです。

git_remote_branchバージョン0.2.6

  使用法:

  grb create branch_name [origin_server]

  grb publish branch_name [origin_server]

  grb rename branch_name [origin_server]

  grb delete branch_name [origin_server]

  grb track branch_name [origin_server]



  ノート:
  -origin_serverが指定されていない場合、「origin」という名前が想定されます
    (gitのデフォルト)
  -名前変更機能は、現在のブランチの名前を変更します

  Explainメタコマンド:コマンドの前にコマンドを追加することもできます
キーワード「説明」。コマンドを実行する代わりに、git_remote_branch
実行する必要のあるコマンドのリストを出力するだけです
その目標。

  例:
    grb Explain Create
    grb Explain create my_branch github

  すべてのコマンドにはエイリアスもあります。
  作成:作成、新規
  削除:削除、破棄、強制終了、削除、rm
  公開:公開、リモート化
  名前の変更:名前の変更、rn、mv、移動
  追跡:追跡、フォロー、グラブ、フェッチ
于 2008-09-20T13:53:58.913 に答える
13
#!/bin/bash
for branch in `git branch -a | grep remotes | grep -v HEAD | grep -v master `; do
   git branch --track ${branch#remotes/origin/} $branch
done

これらのコードは、すべてのリモート ブランチ コードをローカル リポジトリにプルします。

于 2016-12-11T02:20:42.023 に答える
13

質問への回答の1つを見ると、それを短くすることが可能であることに気付きました:

for branch in  `git branch -r | grep -v 'HEAD\|master'`; do
    git branch --track ${branch##*/} $branch;
done

ただし、リモート ブランチの 1 つにadmin_masterなどの名前が付けられている場合、ダウンロードされないことに注意してください。

于 2015-02-19T21:33:08.743 に答える
10

コマンド ラインにコピー アンド ペーストする場合:

git checkout master ; remote=origin ; for brname in `git branch -r | grep $remote | grep -v master | grep -v HEAD | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'`; do git branch -D $brname ; git checkout -b $brname $remote/$brname ; done ; git checkout master

読みやすくするために:

git checkout master ;
remote=origin ;
for brname in `
    git branch -r | grep $remote | grep -v master | grep -v HEAD
    | awk '{gsub(/^[^\/]+\//,"",$1); print $1}'
`; do
    git branch -D $brname ;
    git checkout -b $brname $remote/$brname ;
done ;
git checkout master

この意志:

  1. マスターをチェックアウトします(現在のブランチを削除できるようにするため)
  2. チェックアウトするリモートを選択します(お持ちのリモートに変更してください)
  3. master と HEAD を除くリモートのすべてのブランチをループします0. ローカル ブランチを削除します (強制的に更新されたブランチをチェックアウトできるように) 0.リモートからブランチをチェックアウトします
  4. マスターをチェックしてください(そのために)

VonCの回答に基づいています。

于 2013-12-20T06:38:02.740 に答える
10

これらの小さなPowerShell関数を作成して、オリジン リモートにあるすべての Git ブランチをチェックアウトできるようにしました。

Function git-GetAllRemoteBranches {
     iex "git branch -r"                       <# get all remote branches #> `
     | % { $_ -Match "origin\/(?'name'\S+)" }  <# select only names of the branches #> `
     | % { Out-Null; $matches['name'] }        <# write does names #>
}


Function git-CheckoutAllBranches {
    git-GetAllRemoteBranches `
        | % { iex "git checkout $_" }          <# execute ' git checkout <branch>' #>
}

その他の Git 機能は、Git 設定リポジトリにあります。

于 2016-06-19T10:54:23.777 に答える
8

私はまったく同じことをする必要がありました。これが私のRubyスクリプトです。

#!/usr/bin/env ruby

local = []
remote = {}

# Prepare
%x[git reset --hard HEAD]
%x[git checkout master] # Makes sure that * is on master.
%x[git branch -a].each_line do |line|
  line.strip!
  if /origin\//.match(line)
     remote[line.gsub(/origin\//, '')] = line
   else
     local << line
   end
end
# Update 
remote.each_pair do |loc, rem|
  next if local.include?(loc)
  %x[git checkout --track -b #{loc} #{rem}]
end
%x[git fetch]
于 2010-12-10T23:12:39.360 に答える
7

Git は通常 (指定されていない場合)、すべてのブランチおよび/またはタグ (参照、参照: git ls-refs) を 1 つ以上の他のリポジトリから、それらの履歴を完了するために必要なオブジェクトと共に取得します。つまり、すでにダウンロードされているオブジェクトから到達可能なオブジェクトをフェッチします。参照:git fetch実際に何をしますか?

現在のブランチ/タグに直接接続されていないブランチ/タグがある場合があるため、その場合はgit pull --all/は役に立ちませんが、次の方法でリストできます。git fetch --all

git ls-remote -h -t origin

そして、参照名を知って手動でフェッチします。

したがって、それらすべてを取得するには、次を試してください。

git fetch origin --depth=10000 $(git ls-remote -h -t origin)

リポジトリを浅くした場合、--depth=10000パラメーターが役立つ場合があります。

次に、すべてのブランチをもう一度確認します。

git branch -avv

上記が役に立たない場合は、不足しているブランチを追跡リストに手動で追加する必要があります (何らかの形で失われたため)。

$ git remote -v show origin

...
  Remote branches:
    master      tracked

git remote set-branchesように:

git remote set-branches --add origin missing_branch

remotes/originそのため、フェッチ後の下に表示される場合があります。

$ git remote -v show origin

...
  Remote branches:
    missing_branch new (next fetch will store in remotes/origin)
$ git fetch
From github.com:Foo/Bar
 * [new branch]      missing_branch -> origin/missing_branch

トラブルシューティング

それでもマスター ブランチ以外を取得できない場合は、次の点を確認してください。

  • リモコンを再確認してください ( git remote -v)。
    • であることを検証しgit config branch.master.remoteますorigin
    • origin次の方法で正しい URL を指しているかどうかを確認しますgit remote show origin(この投稿を参照してください)。
于 2016-03-31T00:48:48.600 に答える
7

覚えやすいコマンドを使用する

Atlassian のリポジトリ ホスティング サービスである Bitbucket を使用しています。だから私は彼らのドキュメントに従おうとします。そして、それは私にとって完璧に機能します。次の簡単で短いコマンドを使用すると、リモート ブランチをチェックアウトできます。

最初にリポジトリをクローンしてから、宛先フォルダーに変更します。最後に、fetch と checkout を行います。

git clone <repo> <destination_folder>
cd <destination_folder>
git fetch && git checkout <branch>

それでおしまい。もう少し現実的な例を次に示します。

git clone https://username@bitbucket.org/team/repository.git project_folder
cd project_folder
git fetch && git checkout develop

コマンドの詳細については、次のドキュメントを参照してください: Clone コマンドFetch コマンドCheckout コマンド

于 2016-03-11T20:01:06.573 に答える
7

すべてのリモート ブランチのローカル ブランチを作成する別の短いワンライナー コマンドを次に示します。

(git branch -r | sed -n '/->/!s#^  origin/##p' && echo master) | xargs -L1 git checkout

トラッキング ローカル ブランチが既に作成されている場合も適切に機能します。git clone最初または後でいつでも呼び出すことができます。

masterクローン作成後にブランチをチェックアウトする必要がない場合は、

git branch -r | sed -n '/->/!s#^  origin/##p'| xargs -L1 git checkout
于 2015-09-10T12:04:08.903 に答える
2

これでうまくいくと思います:

mkdir YourRepo
cd YourRepo
git init --bare .git                       # create a bare repo
git remote add origin REMOTE_URL           # add a remote
git fetch origin refs/heads/*:refs/heads/* # fetch heads
git fetch origin refs/tags/*:refs/tags/*   # fetch tags
git init                                   # reinit work tree
git checkout master                        # checkout a branch

これまでのところ、これは私にとってはうまくいきます。

于 2012-09-12T14:01:44.170 に答える
1

これは、すべてのブランチを停止する必要があるときはいつでも行うことです。Linkedin Learning のRay Villalobosのクレジット。コミットを含むすべてのブランチのクローンを作成してみてください。

mkdir -p -- newproject_folder
cd newproject_folder
git clone --mirror https://github.com/USER_NAME/RepositoryName.git .git
git config --bool core.bare false
git reset --hard
于 2020-09-19T16:17:45.580 に答える
0

これは、以前の回答から適用されたクロスプラットフォームのPowerShell 7関数です。

function Invoke-GitCloneAll($url) {
    $repo = $url.Split('/')[-1].Replace('.git', '')
    $repo_d = Join-Path $pwd $repo
    if (Test-Path $repo_d) {
        Write-Error "fatal: destination path '$repo_d' already exists and is not an empty directory." -ErrorAction Continue
    } else {
        Write-Host "`nCloning all branches of $repo..."
        git -c fetch.prune=false clone $url -q --progress &&
        git -c fetch.prune=false --git-dir="$(Join-Path $repo_d '.git')" --work-tree="$repo_d" pull --all
        Write-Host "" #newline
    }
}

注: -c fetch.prune=false通常は除外される古いブランチを含めるようにします。興味がなければ削除してください。


関数から削除することで、PowerShell 5.1 (Windows 10 のデフォルト) でこれを機能させることができますが、前のコマンドが失敗した場合でも&&機能しようとします。git pullしたがって、クロスプラットフォームの PowerShell を使用することを強くお勧めします。

于 2020-07-19T07:35:27.337 に答える
0

Visual Studio Codeを使用する開発者にとってより優れた代替ソリューションは、 Git Shadow Extensionを使用することです。

この Visual Studio Code 拡張機能を使用すると、ブランチ名またはコミット ハッシュでフィルター処理できるリポジトリ コンテンツとディレクトリのクローンを作成できます。そうすれば、ブランチまたはコミットを新しいプロジェクトのボイラープレート/テンプレートとして使用できます。

于 2020-01-22T15:55:09.033 に答える
0

リモート リポジトリのベア クローンを作成し、コンテンツを .git ディレクトリに保存します。

git clone --bare remote-repo-url.git localdirname/.git

(git clone --bare または git init --bare を使用して作成されたベア git リポジトリはストレージ リポジトリであり、作業ディレクトリを持たないため、そこでファイルを作成または変更することはできません。)

ディレクトリをローカル ディレクトリに変更します

cd localdirname

git リポジトリを変更可能にする

git config --bool core.bare false

作業ディレクトリを復元する

git reset --hard

すべてのブランチを一覧表示する

git branch -al
于 2021-07-13T08:58:46.813 に答える