とブランチがmaster
あり、どちらもGitHubdevelopment
にプッシュされています。d、ed、およびedを実行しましたが、ブランチ以外は何も取得できません。clone
pull
fetch
master
明らかな何かが欠けていると確信していますが、マニュアルを読みましたが、まったく喜びがありません。
とブランチがmaster
あり、どちらもGitHubdevelopment
にプッシュされています。d、ed、およびedを実行しましたが、ブランチ以外は何も取得できません。clone
pull
fetch
master
明らかな何かが欠けていると確信していますが、マニュアルを読みましたが、まったく喜びがありません。
まず、リモート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 &
一度に取得したいリモート ブランチが多数ある場合は、次のようにします。
git pull --all
これで、リモート リポジトリにアクセスすることなく、必要に応じて任意のブランチをチェックアウトできるようになりました。
注:これにより、チェックアウトされていないブランチの作業コピーは作成されません。これは、質問が求めていたものです。そのためには、
この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 に送られます
--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 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>
それにかんする、
gitcheckout-b実験的起源/実験的
を使用して
git checkout -t origin/experimental
またはより冗長ですが、覚えやすいです
git checkout --track origin/experimental
リモートリポジトリを追跡するという点では、より良いかもしれません。
実行しているフェッチはすべてのリモートブランチを取得する必要がありますが、それらのローカルブランチは作成されません。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ブランチと同じポイントに更新します。すべてのブランチをフェッチしますが、ツリーの一番上にあるブランチのみをプルすることに注意してください。
エイリアスを使用します。ネイティブの 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
これを行う最良の方法は次のとおりです。
mkdir repo
cd repo
git clone --bare path/to/repo.git .git
git config --unset core.bare
git reset --hard
この時点で、すべてのブランチを含むリモート リポジトリの完全なコピーが作成されます ( で確認しgit branch
ます)。リモートリポジトリに独自のリモートがある場合は、--mirror
代わりに使用できます。--bare
「gitclonegit:// location」を実行すると、すべてのブランチとタグがフェッチされます。
特定のリモートブランチ上で作業するには、それが元のリモートであると想定します。
git checkout -b branch origin/branchname
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
ください)。
これを行うだけです:
$ 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」はブランチも含めてすべてを取得します。それらをチェックアウトするだけで、ローカル ブランチが作成されます。
すべてのブランチを取得するには、「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」を実行すると、リモート リポジトリからすべてのブランチが既にコピーされていることが証明されます。その後、リモート リポジトリは必要ありません。あなたのローカルにはすでにすべてのブランチのコードがあります。
Agit clone
はリポジトリ全体をコピーすることになっています。クローンを作成してから、を実行してくださいgit branch -a
。すべてのブランチをリストする必要があります。次に、「master」ではなくブランチ「foo」に切り替えたい場合は、を使用しますgit checkout foo
。
私のツールgit_remote_branch(grb)を使用してください。マシンに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、移動 追跡:追跡、フォロー、グラブ、フェッチ
#!/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
これらのコードは、すべてのリモート ブランチ コードをローカル リポジトリにプルします。
質問への回答の1つを見ると、それを短くすることが可能であることに気付きました:
for branch in `git branch -r | grep -v 'HEAD\|master'`; do
git branch --track ${branch##*/} $branch;
done
ただし、リモート ブランチの 1 つにadmin_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
読みやすくするために:
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
この意志:
これらの小さな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 設定リポジトリにあります。
私はまったく同じことをする必要がありました。これが私の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]
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
(この投稿を参照してください)。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 コマンド
すべてのリモート ブランチのローカル ブランチを作成する別の短いワンライナー コマンドを次に示します。
(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
これでうまくいくと思います:
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
これまでのところ、これは私にとってはうまくいきます。
これは、すべてのブランチを停止する必要があるときはいつでも行うことです。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
これは、以前の回答から適用されたクロスプラットフォームの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 を使用することを強くお勧めします。
Visual Studio Codeを使用する開発者にとってより優れた代替ソリューションは、 Git Shadow Extensionを使用することです。
この Visual Studio Code 拡張機能を使用すると、ブランチ名またはコミット ハッシュでフィルター処理できるリポジトリ コンテンツとディレクトリのクローンを作成できます。そうすれば、ブランチまたはコミットを新しいプロジェクトのボイラープレート/テンプレートとして使用できます。
リモート リポジトリのベア クローンを作成し、コンテンツを .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