新しく作成されたブランチを含め、デフォルトですべてのブランチをプッシュおよびプルしたいと思います。
定義できる設定はありますか?
それ以外の場合、新しいブランチをローカルに追加し、それをサーバーからプルしたい場合、それを行う最も簡単な方法は何ですか?
同じ名前の新しいブランチを作成してプルしようとしましたが、機能しません。ブランチのすべてのリモート構成を要求します。設定方法は?
新しく作成されたブランチを含め、デフォルトですべてのブランチをプッシュおよびプルしたいと思います。
定義できる設定はありますか?
それ以外の場合、新しいブランチをローカルに追加し、それをサーバーからプルしたい場合、それを行う最も簡単な方法は何ですか?
同じ名前の新しいブランチを作成してプルしようとしましたが、機能しません。ブランチのすべてのリモート構成を要求します。設定方法は?
回答:
最も簡単な方法は次のとおりです。
git push --all origin
これにより、タグとブランチがプッシュされます。
-u
一度追加すると、たとえばgit push --all origin -u
トラッキングが設定され、その後は簡単に使用できますgit push
。
git push --tags origin
、すべてのタグをプッシュするために使用する必要がありました。
最新のgitを使用すると、常にすべてのブランチをフェッチします(refs/remotes/origin/*
名前空間へのリモート追跡ブランチとして、git branch -r
またはで表示可能git remote show origin
)。
デフォルトでは(push.default
設定変数のドキュメントを参照)、一致するブランチをプッシュします。つまり、最初git push origin branch
にgitが常にそれをプッシュするようにする必要がありgit push
ます。
あなたがしたい場合は、常にすべてのブランチをプッシュする、あなたはプッシュrefspecを設定することができます。リモートに名前が付けられていると仮定すると、git configをorigin
使用できます。
$ git config --add remote.origin.push '+refs/heads/*:refs/heads/*'
$ git config --add remote.origin.push '+refs/tags/*:refs/tags/*'
または.git/config
、次のようなものになるようにファイルを直接編集します。
[リモート「元」] url = user@example.com:/srv/git/repo.git フェッチ= + refs / heads / *:refs / remotes / origin / * フェッチ= + refs / tags / *:refs / tags / * プッシュ= + refs / heads / *:refs / heads / * プッシュ= + refs / tags / *:refs / tags / *
git push --all origin
すべてのブランチとタグを一度に公開するのに適していますが、現在のバージョンの「マッチング」セマンティクスまでのデフォルトでは、新しいブランチまたはタグを追加しない限り、後ですべてのブランチをプッシュすることになります... 「デフォルトですべてのブランチをプッシュ[...]する」という設定は、記述どおりです。
fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''
注:私はgit 2.0を使用しています。これを修正する方法をまだ検討中です。)
push.default
ですsimple
。
+をpush仕様に含めることはおそらく悪い考えです。これは、gitが-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/*'
--global
これらのそれぞれにオプションを追加して、これをすべてのリポジトリのグローバルデフォルトにすることもできます。
git remote add
。
以下のコマンドを使用して、すべてのブランチを新しいリポジトリに移行しました。
~$ 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
注:Atlassian StashからAWS CodeCommit(空のレポ)にレポを複製するときは、最後から2番目(つまり、最初にプッシュマスター)コマンドを使用する必要がありました。理由はわかりませんが、(git push new-origin --mirror
)を押した後、デフォルトのブランチが以外のブランチを参照していましたmaster
。
git push new_origin --all
元のすべてのブランチではなく、現在のローカルブランチをnew_originにプッシュするだけを使用します。
--bare
これは、通常のリポジトリとは少し異なるリポジトリを作成することに注意して.git
ください。ファイルはありますが、ファイルはありません。作業を行わない場合は、これで十分です。--bare
と--mirror
git-scm.com/docs/git-cloneを参照してください。
ブランチを古いものから新しいリポジトリに移動していて、古いリポジトリのブランチがすべてローカルにない場合は、まずそれらを追跡する必要があります。
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
または、これを一度に行わない場合、またはローカルブランチの移動のみを目的としている場合は、他の応答に記載されているgit configコマンドを使用してリポジトリを設定できます。
重要な点は、他の応答はすべてのLOCALブランチのみをプッシュすることです。ブランチが代替のREMOTEリポジトリにのみ存在する場合、ブランチを最初に追跡しないと移動しません。ここで紹介するforループは、これに役立ちます。
git branch --track reponame origin/reponame
それ以外の場合は、すべてのリモートブランチを現在のローカルブランチで追跡することです
git branch -r | grep -v '\->' | sed 's/ origin\///'
。これにより、リモートブランチ名のみが提供されます。
使用せずにすべてのブランチを表示するには、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
git fetch --all
?
すべてのブランチを古いものから新しいリポジトリに移動する場合、ローカルリポジトリでは、新しいリポジトリにプッシュする前に、既存のオリジンブランチへの各ブランチのトラッキングを設定する必要があります。そうしないと、すべてのオリジンブランチが表示されません。新しい原点。各ブランチを追跡またはチェックアウトして手動でこれを行うか、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行のコマンドは、このページの他の回答のバージョンに基づいていますが、次の理由から間違いなく優れています。
次に、オリジンを切り替える場合は、古いオリジンへのリンクを置き換え、新しいリモートをポイントします。最初にbitbucket / github GUIを使用して新しいリモートを作成してください。ただし、ファイルを追加しないでください。マージの問題が発生します。例えば
git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git
押してください。タグをプッシュするためにも2番目のコマンドが必要であることに注意してください。
git push -u --all origin
git push --tags origin
origin
設定にハードコーディングのないソリューショングローバル gitconfigで以下を使用します
[remote]
push = +refs/heads/*
push = +refs/tags/*
これはすべてのブランチとすべてのタグをプッシュします
origin
設定にハードコードすべきではないのですか?ハードコードする場合:
origin
すべてのリポジトリでリモートとして終わるでしょう。したがって、オリジンを追加することはできませんが、を使用する必要がありますset-url
。origin
(ポイント1から)すでに存在するため、名前の変更は機能しません。JakubNarębskiの回答によると:
最新のgitでは常にすべてのブランチを(リモート追跡ブランチとしてrefs / remotes / origin / *名前空間に)フェッチします