新しく作成したものも含め、デフォルトですべてのブランチをプッシュしてプルしたいのですが。
定義できる設定はありますか?
そうでなければ、ローカルに新しいブランチを追加してサーバからそれを引き出したいとき、それをする最も簡単な方法は何ですか?
同じ名前で新しいブランチを作成して引っ張ろうとしましたが、うまくいきません。ブランチのすべてのリモート設定を聞いてきます。設定方法は?.
最も簡単な方法は次のとおりです。
git Push --all Origin
これはタグとブランチをプッシュします。
最新の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/*
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/*'
以下のコマンドを使用して、すべてのブランチを新しいリポジトリに移行しました。
~$ 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
以外のブランチを参照していました。
ブランチを古いリポジトリから新しいリポジトリに移動し、すべての古いリポジトリブランチをローカルに持っていない場合は、まずそれらを追跡する必要があります。
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ループはそれを助けるでしょう。
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
古いリポジトリから新しいリポジトリにすべてのブランチを移動する場合、ローカルリポジトリで、新しいリポジトリにプッシュする前に、既存の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行のコマンドは、このページの他の回答のバージョンに基づいていますが、次の理由により間違いなく優れています。
次に、オリジンを切り替える場合、古いオリジンへのリンクを置き換えて、新しいリモートをポイントします。最初にbitbucket/github GUIを使用して新しいリモートを作成しますが、ファイルを追加しないでください。そうしないと、マージの問題が発生します。例えば。
git remote set-url Origin [email protected]:YOUR/SOMEREPO.git
今プッシュ。タグをプッシュするためにも2番目のコマンドが必要であることに注意してください。
git Push -u --all Origin
git Push --tags Origin
Origin
をハードコーディングしないで解決するあなたのグローバルgitconfigで以下を使ってください。
[remote]
Push = +refs/heads/*
Push = +refs/tags/*
これはすべてのブランチとすべてのタグをプッシュします
Origin
をハードコードしないのですか?ハードコードした場合:
Origin
を使うことになります。そのため、Originを追加することはできませんが、set-url
を使用する必要があります。Origin
はすでに存在しているので、名前の変更は機能しません(ポイント1から):)JakubNarębskiの答えによると:
Modern gitでは、常にすべてのブランチを(リモートトラッキングブランチとして)refs/remotes/Origin/*名前空間に取得します。
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