私はGitリポジトリをクローンしました。これには5つのブランチがあります。しかし、私がgit branch
を実行するとき、私はそれらのうちの1つだけを見ます:
$ git branch
* master
all ブランチを表示するためにgit branch -a
を実行できることはわかっていますが、git branch
を実行すると次のようになります。
$ git branch
* master
* staging
* etc...
あなたはこのようなすべてのリモートから一つのブランチを取得することができます:
git fetch --all
fetch
はリモートブランチのローカルコピーを更新するので、これはあなたのローカルブランチにとっては常に安全です _しかし_ :
fetch
は update localの枝( track remoteの枝)を更新しません。あなたがあなたのローカルブランチを更新したいのであれば、あなたはまだすべてのブランチを引っ張る必要があります。
fetch
は create local branches(これは track remote branches)を作成しません。手動でこれを行う必要があります。すべてのリモートブランチを一覧表示したい場合はgit branch -a
リモートブランチを追跡する update localブランチへ:
git pull --all
ただし、これでもまだ不十分な場合があります。リモートブランチを追跡するローカルブランチに対してのみ機能します。すべてのリモートブランチを追跡するには、このoneliner _を_ git pull --all
の前に実行します。
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#Origin/}" "$remote"; done
git branch -r | grep -v '\->' | while read remote; do git branch --track "${remote#Origin/}" "$remote"; done
git fetch --all
git pull --all
(pullはすべてのリモートからすべてのブランチを取得するようですが、念のために必ず最初に取得します。)
最初のコマンドは、ローカルブランチで追跡されていないリモートブランチがサーバー上にある場合にのみ実行してください。
P.S AFAIK git fetch --all
とgit remote update
は同等です。
Kamil Szotの コメント 、74人(少なくとも)の人が役に立ちました。
私は使用しなければなりませんでした:
for remote in `git branch -r`; do git branch --track ${remote#Origin/} $remote; done
あなたのコードが
Origin/branchname
という名前のローカルブランチを作成していて、私が "refname 'Origin/branchname'を参照しているときはいつもあいまいです。
リモートブランチをリストするには:git branch -r
それらをローカルブランチとしてチェックアウトするには:git checkout -b LocalName Origin/remotebranchname
リモートブランチを追跡するローカルブランチを作成する必要があります。
Origin
という名前のリモートが1つだけあると仮定すると、このスニペットはすべてのリモート追跡用のローカルブランチを作成します。
for b in `git branch -r | grep -v -- '->'`; do git branch --track ${b##Origin/} $b; done
その後、git fetch --all
はリモートブランチのすべてのローカルコピーを更新します。
また、git pull --all
はあなたのローカルトラッキングブランチを更新しますが、あなたのローカルコミットと 'merge' configureオプションの設定方法によってはマージコミット、早送りあるいは失敗を引き起こすかもしれません。
もしあなたがそうするなら:
git fetch Origin
それから彼らはすべてローカルにいるでしょう。あなたがその後実行した場合:
git branch -a
あなたはそれらがremotes/Origin/branch-nameとしてリストされているのを見るでしょう。彼らは地元にいるので、あなたは彼らと一緒に好きなことは何でもすることができます。例えば:
git diff Origin/branch-name
または
git merge Origin/branch-name
または
git checkout -b some-branch Origin/branch-name
$ git remote update
$ git pull --all
これはすべてのブランチが追跡されていることを前提としています。
そうでない場合は、Bashでこれを起動できます。
for remote in `git branch -r `; do git branch --track $remote; done
その後、コマンドを実行してください。
git fetch && git checkout RemoteBranchName
を使用してください。
それは私にとって非常にうまくいきます...
Bashのfor
ループは私にとってはうまくいきませんでしたが、これはまさに私が望んでいたことでした。私のOriginのブランチはすべて同じ名前でローカルにミラーされていました。
git checkout --detach
git fetch Origin '+refs/heads/*:refs/heads/*'
下の Mike DuPont のコメントを参照してください。私はJenkinsサーバでこれをやろうとしていたと思います。
リポジトリをクローンすると、ブランチのすべての情報が実際にダウンロードされますが、ブランチは非表示になります。コマンドで
$ git branch -a
あなたはリポジトリのすべてのブランチを表示することができ、そしてコマンドで
$ git checkout -b branchname Origin/branchname
その後、それらを手動で一度に1つずつ「ダウンロード」できます。
しかし、それは少し複雑ですが、はるかにクリーンで迅速な方法があります。これを達成するには3つのステップが必要です。
最初の一歩
あなたのマシン上に新しい空のフォルダを作成し、リポジトリから.gitフォルダのミラーコピーを複製します。
$ cd ~/Desktop && mkdir my_repo_folder && cd my_repo_folder
$ git clone --mirror https://github.com/planetoftheweb/responsivebootstrap.git .git
my_repo_folderフォルダ内のローカルリポジトリはまだ空です。ターミナルから "ls -alt"コマンドで見ることができるように、隠された.gitフォルダがあります。
第二段階
git設定のブール値 "bare"をfalseに切り替えて、このリポジトリを空の(ベア)リポジトリから通常のリポジトリに切り替えます。
$ git config --bool core.bare false
第三段階
現在のフォルダ内にあるものすべてをつかみ、ローカルマシン上にすべてのブランチを作成します。したがって、これは通常のリポジトリになります。
$ git reset --hard
これで、git branch
コマンドを入力するだけで、すべてのブランチがダウンロードされたことがわかります。
これはgitリポジトリを一度にすべてのブランチでクローンすることができる簡単な方法ですが、この方法ですべての単一プロジェクトに対してやりたいことではありません。
次のようにしてすべてのブランチを取得することができます。
git fetch --all
または
git fetch Origin --depth=10000 $(git ls-remote -h -t Origin)
--depth=10000
パラメータは、リポジトリを浅くしている場合に役立つかもしれません。
すべての枝を引っ張るには、次のようにします。
git pull --all
上記の方法でうまくいかない場合は、上記のコマンドの前に次のように入力します。
git config remote.Origin.fetch '+refs/heads/*:refs/remotes/Origin/*'
remote.Origin.fetch
はフェッチ中に特定のブランチのみをサポートする可能性があるため、特に--single-branch
を使用してリポジトリを複製した場合は特にそうです。これをチェックしてください:git config remote.Origin.fetch
。
その後、あなたはどんなブランチでもチェックアウトできるはずです。
また見なさい:
すべてのブランチをリモートにプッシュするには、次のようにします。
git Push --all
最終的に--mirror
はすべての参照を反映します。
あなたの目的がリポジトリを複製することであるなら、GitHubの リポジトリの複製 の記事を見てください。
私は通常、このようなコマンド以外は何も使用しません。
git fetch Origin
git checkout --track Origin/remote-branch
もう少し短いバージョン:
git fetch Origin
git checkout -t Origin/remote-branch
私はあなたがリポジトリをクローンしたと信じています:
git clone https://github.com/pathOfrepository
それではcdを使ってそのフォルダに行ってください。
cd pathOfrepository
git status
と入力すると、allと表示されます。
On branch master
Your branch is up-to-date with 'Origin/master'.
nothing to commit, working directory clean
すべての隠しブランチタイプを見るには:
git branch -a
すべてのリモートブランチが一覧表示されます。
特定のブランチでチェックアウトしたい場合は、次のように入力してください。
git checkout -b localBranchName Origin/RemteBranchName
すべてのブランチを取得してからすべてを別のGitサーバーに移行するためのソリューションを探しているのであれば、以下のプロセスをまとめます。すべてのブランチをローカルに更新したいだけの場合は、最初の空行で止めます。
git clone <ORIGINAL_Origin>
git branch -r | awk -F'Origin/' '!/HEAD|master/{print $2 " " $1"Origin/"$2}' | xargs -L 1 git branch -f --track
git fetch --all --Prune --tags
git pull --all
git remote set-url Origin <NEW_Origin>
git pull
<resolve_any_merge_conflicts>
git Push --all
git Push --tags
<check_NEW_Origin_to_ensure_it_matches_ORIGINAL_Origin>
マスターリポジトリをクローンした後は、ただ実行することができます。
git fetch && git checkout <branchname>
ループは私にはうまくいかないようで、Origin/masterを無視したいと思いました。これは私のために働いたものです。
git branch -r | grep -v HEAD | awk -F'/' '{print $2 " " $1"/"$2}' | xargs -L 1 git branch -f --track
その後:
git fetch --all
git pull --all
すべてのリモートブランチが.git/config
ファイルで取得可能であることを確認してください。
この例では、Origin/production
ブランチのみがフェッチ可能です。たとえgit fetch --all
を実行しようとしても、production
ブランチをフェッチするだけで、何も起こりません。
[Origin]
fetch = +refs/heads/production:refs/remotes/Origin/production
この行は次のように置き換えられます。
[Origin]
fetch = +refs/heads/*:refs/remotes/Origin/*
それからgit fetch
etc ...を実行してください。
これら3つのコマンドだけですべての分岐が得られます。
git clone --mirror repo.git .git (gets just .git - bare repository)
git config --bool core.bare false
git reset --hard
私は新しいリポジトリのクローンを作成し、すべてのリモートブランチ用にローカルブランチを作ることを管理するための小さなスクリプトを書きました。
最新版を見つけることができます ここ :
#!/bin/bash
# Clones as usual but creates local tracking branches for all remote branches.
# To use, copy this file into the same directory your git binaries are (git, git-flow, git-subtree, etc)
clone_output=$((git clone "$@" ) 2>&1)
retval=$?
echo $clone_output
if [[ $retval != 0 ]] ; then
exit 1
fi
pushd $(echo $clone_output | head -1 | sed 's/Cloning into .\(.*\).\.\.\./\1/') > /dev/null 2>&1
this_branch=$(git branch | sed 's/^..//')
for i in $(git branch -r | grep -v HEAD); do
branch=$(echo $i | Perl -pe 's/^.*?\///')
# this doesn't have to be done for each branch, but that's how I did it.
remote=$(echo $i | sed 's/\/.*//')
if [[ "$this_branch" != "$branch" ]]; then
git branch -t $branch $remote/$branch
fi
done
popd > /dev/null 2>&1
それを使うには、それをあなたのgit binディレクトリにコピーしてください(私にとってはC:\Program Files (x86)\Git\bin\git-cloneall
です)。それからコマンドラインで:
git cloneall [standard-clone-options] <url>
通常どおりクローンを作成しますが、すべてのリモートブランチ用にローカルトラッキングブランチを作成します。
これは私が頑強だと思うものです:
Origin/HEAD
を追跡するようにHEAD
を更新しようとしないOrigin
以外の名前のリモートを許可しますfor b in $(git branch -r --format='%(refname:short)'); do
[[ "${b#*/}" = HEAD ]] && continue
git show-ref -q --heads "${b#*/}" || git branch --track "${b#*/}" "$b";
done
git pull --all
git fetch --all
を-all
に渡すとこのオプションが内部のfetch
に渡されるので、git pull
は必要ありません。
この答えに - のクレジット。
これが、受け入れられた答えで提供されているワンライナーのPerl版です。
git branch -r | Perl -e 'while(<>) {chop; my $remote = $_; my ($local) = ($remote =~ /Origin\/(.*)/); print "git branch --track $local $remote\n";}' > some-output-file
必要に応じて、出力ファイルをシェルスクリプトとして実行できます。
Stashプロジェクトリポジトリを誤って削除しました。幸い、誰かが偶然の損失の直前にフォークを作りました。私は自分の地元にフォークをクローンした(私がそうした方法の詳細は省略する)。フォークを地元で完全に手に入れたら、ワンライナーを走らせました。リモートのURL(私の場合はOrigin)を修正して、復旧先のターゲットリポジトリを指すようにしました。
git remote set-url Origin <remote-url>
そしてようやくすべてのブランチをOriginにプッシュしました。
git Push --all Origin
そして私達はビジネスに戻った。
PowerShellを使用しているWindowsユーザーの場合:
git branch -r | ForEach-Object {
# Skip default branch, this script assumes
# you already checked-out that branch when cloned the repo
if (-not ($_ -match " -> ")) {
$localBranch = ($_ -replace "^.*/", "")
$remoteBranch = $_.Trim()
git branch --track "$localBranch" "$remoteBranch"
}
}
git fetch --all
git pull --all
ブランチやタグの名前をすべて一時ファイルに入れてから、それぞれの名前/タグに対してgit pullを実行します。
git branch -r | grep Origin | grep -v HEAD| awk -F/ '{print $NF}' > /tmp/all.txt
git tag -l >> /tmp/all.txt
for tag_or_branch in `cat /tmp/all.txt`; do git checkout $tag_or_branch; git pull Origin $tag_or_branch; done
'fatal:' Origin/master 'という名前のブランチが既に存在しています'というエラーメッセージを回避するには、これが必要です。
git branch -r | grep -v '\->' | grep -v `git branch | awk '/\*/ { print $2; }'`| while read remote; do git branch --track "${remote#Origin/}" "$remote"; done
fetch --all
に関して問題がある場合は、リモートブランチを追跡してください。
git checkout --track Origin/%branchname%
これはWindows 10上のRed HatおよびGit Bashでテストされ機能しています。
TLDR:
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
説明:
一方のライナーはチェックアウトしてから、HEAD以外のすべてのブランチを取り出します。
リモートトラッキングブランチを一覧表示します。
git branch -r
HEADを無視してください。
grep -v ' -> '
支店名をリモコンから外します。
cut -d"/" -f2
単一のリモコンを追跡するすべてのブランチをチェックアウトしてください。
git checkout $branch
チェックアウトしたブランチを取得します。
git fetch
技術的には、フェッチは新しいローカルブランチには必要ありません。
これはfetch
とpull
の両方のブランチで、どちらも新しくてリモートに変更がある場合に使用できます。
マージする準備ができている場合にのみプルするようにしてください。
SSH URLでリポジトリをチェックしてください。
git clone [email protected]
前
ローカルで枝をチェックしてください。
$ git branch
* master
コマンド実行
ワンライナーを実行します。
for branch in `git branch -r|grep -v ' -> '|cut -d"/" -f2`; do git checkout $branch; git fetch; done;
あと
ローカルブランチにリモートブランチが含まれていることを確認してください。
$ git branch
cicd
master
* preprod
Visual Studioユーザーの場合、Package Managerコンソールで次の操作を行います。
gitブランチ| %{上流へのgitフェッチ。 git merge upstream/master}
Learath2の答えに基づいて、作成したディレクトリにgit clone [...]
とcd
を入れた後に私がしたことがあります。
git branch -r | grep -v master | awk {print\$1} | sed 's/^Origin\/\(.*\)$/\1 &/' | xargs -n2 git checkout -b
私のために働いたが、私はそれがあなたのために働くことを知りません。注意してください。
多くの方法を試してみましたが、これはシンプルで私にとってはうまくいきます。
for branch in $(git ls-remote -h git@<your_repository>.git | awk '{print $2}' | sed 's:refs/heads/::')
do
git checkout "$branch"
git pull
done
git remote add Origin https://yourBitbucketLink
git fetch Origin
git checkout -b yourNewLocalBranchName Origin/requiredRemoteBranch (use tab :D)
今ローカルであなたのyourNewLocalBranchName
はあなたのrequiredRemoteBranch
です。