web-dev-qa-db-ja.com

すべてのブランチを引っ張ってプッシュするようにgitを設定する

新しく作成したものも含め、デフォルトですべてのブランチをプッシュしてプルしたいのですが。

定義できる設定はありますか?

そうでなければ、ローカルに新しいブランチを追加してサーバからそれを引き出したいとき、それをする最も簡単な方法は何ですか?

同じ名前で新しいブランチを作成して引っ張ろうとしましたが、うまくいきません。ブランチのすべてのリモート設定を聞いてきます。設定方法は?.

523
Lakshman Prasad

最も簡単な方法は次のとおりです。

git Push --all Origin

これはタグとブランチをプッシュします。

1139
brimble2010

最新のgitでは、常にすべてのブランチをフェッチしますrefs/remotes/Origin/*名前空間へのリモート追跡ブランチとして、git branch -rまたはgit remote show Origin)。

デフォルトでは(Push.default構成変数のドキュメントを参照)、プッシュ一致するブランチ gitが常にgit Push Origin branchにプッシュするために、まずgit Pushを実行する必要があることを意味します。

常にすべてのブランチをプッシュする場合は、Push refspecを設定できます。リモートの名前がOriginであると仮定すると、 git config を使用できます。

$ git config --add remote.Origin.Push '+refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push '+refs/tags/*:refs/tags/*'

または、.git/configファイルを直接編集して、次のようなファイルを作成します。

 [remote "Origin"] 
 url = [email protected]:/srv/git/repo.git 
 fetch = + refs/heads/*:refs/remotes/Origin /*
 fetch = + refs/tags/*:refs/tags /*
 Push = + refs/heads/*:refs/heads /*
 Push = + refs /tags/*:refs/tags/*
143
Jakub Narębski

Push仕様に+を含めることは、おそらくgitが非早送りPush -fがなくてもを実行し、リモートサーバーが受け入れるように設定されていることを意味するため、おそらく悪い考えですそれら、あなたは歴史を失うことができます。

これだけを試してください:

$ git config --add remote.Origin.Push 'refs/heads/*:refs/heads/*'
$ git config --add remote.Origin.Push 'refs/tags/*:refs/tags/*'
$ git config --add remote.Origin.fetch 'refs/heads/*:refs/remotes/Origin/*'
$ git config --add remote.Origin.fetch 'refs/tags/*:refs/tags/*'
32
Mark Reed

以下のコマンドを使用して、すべてのブランチを新しいリポジトリに移行しました。

~$ git clone --mirror <url_of_old_repo>
~$ cd <name_of_old_repo>
~$ git remote add new-Origin <url_of_new_repo>
~$ git Push new-Origin master
~$ git Push new-Origin --mirror

NOTE:Atlassian Stash からAWS CodeCommit (空白のリポジトリ)へのリポジトリの複製中に、最後から2番目(つまり、プッシュマスターが最初)のコマンドを使用する必要がありました。 )理由は定かではありませんが、(git Push new-Origin --mirror)デフォルトのブランチがmaster以外のブランチを参照していました。

19
vikas027

ブランチを古いリポジトリから新しいリポジトリに移動し、すべての古いリポジトリブランチをローカルに持っていない場合は、まずそれらを追跡する必要があります。

for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done

それからあなたの新しいリモートレポを追加します。

git remote add bb <path-to-new-repo>

その後、このコマンドを使用してすべてプッシュできます。

git Push -u bb --all

あるいは、これを1回行っていない場合や、ローカルブランチを移動しようとしているだけの場合は、他の応答に記載されているgit configコマンドを使用してリポジトリを設定できます。

重要な点は、他の応答はすべてのローカルブランチをプッシュするだけです。ブランチが代替のREMOTEリポジトリにしか存在しない場合は、最初にトラッキングしないと移動しません。ここに提示されたforループはそれを助けるでしょう。

11
Lance Cleveland

git branch -aを使わずにすべてのブランチを見るには、以下を実行する必要があります。

for remote in `git branch -r`; do git branch --track $remote; done
git fetch --all
git pull --all

今、あなたはすべての枝を見ることができます:

git branch

すべてのブランチをプッシュするには

git Push --all
5
tokhi

古いリポジトリから新しいリポジトリにすべてのブランチを移動する場合、ローカルリポジトリで、新しいリポジトリにプッシュする前に、既存のOriginブランチへの各ブランチの追跡を設定する必要があります。それ以外の場合はall your Originブランチは、新しいOriginには表示されません。各ブランチを追跡またはチェックアウトして手動でこれを行うか、1つのライナーを使用します。

for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=Origin/=='` `echo $remote`; done

この1行のコマンドは、このページの他の回答のバージョンに基づいていますが、次の理由により間違いなく優れています。

  1. --trackに1つのパラメーターのみを提供するこのページのこのコマンドの古いバリアントとは異なり、ブランチトラッキングを正しくセットアップします。したがって、各ブランチはトラッキングマスターになります-良くありません
  2. 私が個人的に望まない接頭辞「Origin /」なしでローカルブランチに名前を付けます-そして、あなたが通常ブランチをチェックアウトするとき何が起こるかと一貫しています。
  3. すでにマスターが追跡されているため、トラッキングマスターをスキップします
  4. 実際には何もチェックアウトしないため、高速です
  5. git branch -rの出力で->につまずかないようにします

次に、オリジンを切り替える場合、古いオリジンへのリンクを置き換えて、新しいリモートをポイントします。最初にbitbucket/github GUIを使用して新しいリモートを作成しますが、ファイルを追加しないでください。そうしないと、マージの問題が発生します。例えば。

git remote set-url Origin [email protected]:YOUR/SOMEREPO.git

今プッシュ。タグをプッシュするためにも2番目のコマンドが必要であることに注意してください。

git Push -u --all Origin
git Push --tags Origin
3
abulka

ConfigにOriginをハードコーディングしないで解決する

あなたのグローバルgitconfigで以下を使ってください。

[remote]
    Push = +refs/heads/*
    Push = +refs/tags/*

これはすべてのブランチとすべてのタグをプッシュします

なぜあなたはconfigの中でOriginをハードコードしないのですか?

ハードコードした場合:

  1. すべてのリポジトリでリモートとしてOriginを使うことになります。そのため、Originを追加することはできませんが、set-urlを使用する必要があります。
  2. ツールが別の名前でリモートを作成した場合、すべての設定は適用されません。そうすると、リモートの名前を変更する必要がありますが、Originはすでに存在しているので、名前の変更は機能しません(ポイント1から):)

フェッチはすでに現代のgitによって行われています

JakubNarębskiの答えによると:

Modern gitでは、常にすべてのブランチを(リモートトラッキングブランチとして)refs/remotes/Origin/*名前空間に取得します。

0
Dheeraj Bhaskar
for b in $(git branch -a | grep -v master | \
sed -e "s|remotes\/Origin\/\(.*\)|\1|g"); do git checkout $b && \
git Push Origin $b; done
0
030