it-swarm-id.com

Git Push branch dari satu remote ke yang lain?

Saya memiliki pengaturan remote berikut:

$ git remote 
korg
rorg

Dan cabang-cabang berikut:

$ git branch -a
* (no branch)
  remotes/korg/Gingerbread
  remotes/korg/Gingerbread-release
  remotes/korg/honeycomb
  remotes/korg/honeycomb-mr1-release
  remotes/korg/master
  remotes/m/Android-2.3.3_r1 -> refs/tags/Android-2.3.3_r1a
  remotes/m/Gingerbread -> korg/Gingerbread

Sekarang saya ingin Mendorong semua cabang jarak jauh dari korg ke rorg jarak jauh. Bagaimana saya melakukannya?

Lebih disukai tanpa membuat cabang lokal untuk setiap cabang terlebih dahulu, jika itu bisa dihindari.

112

Tes cepat yang membuat beberapa repositori sementara menunjukkan Anda dapat membuat refspec yang dapat melakukan ini:

$ git Push rorg Origin/one:refs/heads/one
Counting objects: 5, done.
Writing objects: 100% (3/3), 240 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /tmp/rorg
 * [new branch]      Origin/one -> one

Jadi Asal/BRANCHNAME: ref/kepala/BRANCHNAME

Memeriksa di rorg jarak jauh saya:

[email protected] /tmp/rorg (BARE:master)
$ git graph --all
* 5750bca (HEAD, master) c
| * 13fd55a (one) b
|/
* 822e0de a
43
patthoyts

Saya menemukan ini:

git Push rorg 'refs/remotes/korg/*:refs/heads/*'

Dan itu mendorong semua cabang terpencil saya dari korg ke rorg (bahkan tanpa salinan cabang lokal). Lihat output di bawah ini:

Counting objects: 293, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (67/67), done.
Writing objects: 100% (176/176), 48.32 KiB, done.
Total 176 (delta 105), reused 168 (delta 97)
remote: Resolving deltas:  11% (12/105)
To <<MY_REPOSITORY_URL>>
 * [new branch]      korg/Gingerbread-> Gingerbread
 * [new branch]      korg/Gingerbread-release -> Gingerbread-release
 * [new branch]      korg/honeycomb-> honeycomb
 * [new branch]      korg/HEAD -> HEAD
 * [new branch]      korg/honeycomb-mr1-release-> honeycomb-mr1-release
 * [new branch]      korg/master -> master

Dan kemudian Anda dapat membuat Push yang sama untuk tags refs:

git Push rorg 'refs/tags/*:refs/tags/*'
198
radistao

Untuk melengkapi jawaban patthoyt , inilah skrip Shell pendek yang mendorong semua cabang dari satu remote ke yang lain:

SRC_REMOTE=korg
DST_REMOTE=rorg
for a in $(git branch --list --remote "$SRC_REMOTE/*" | grep -v --regexp='->')
  do git Push "$DST_REMOTE" "$a:refs/heads/${a//$SRC_REMOTE\/}"
done

Untuk meringkas, untuk setiap cabang jarak jauh pada sumber jarak jauh (tidak termasuk cabang "pointer" seperti HEAD), Dorong referensi itu ke tujuan jarak jauh. (The ${a//$SRC_REMOTE\/} bit menghapus nama sumber jauh dari nama cabang, mis., Origin/master menjadi master.)

14
blahdiblah

Ini berfungsi di Zsh

git Push rorg 'refs/remotes/korg/*:refs/heads/*'
4
Dongfang Zhu

Karena cabang tambahan HEAD sedang dibuat di jawaban sebelumnya , cara terbersih yang saya temukan untuk melakukan ini adalah dengan mengkloning menjadi telanjang. repositori dan kemudian Dorong semua cabang ke remote sebagai berikut:

git clone --bare <from-repository>
cd <from-repo-dir>
git Push --set-upstream <to-repository> --all
git Push --set-upstream <to-repository> --tags
0

ntuk skrip apa pun yang saya jalankan, sebaiknya simpan atau lakukan semua perubahan Anda.

Saya perlu Push beberapa cabang dari satu remote ke yang lain. Jawaban ini mensyaratkan bahwa cabang lokal sebelumnya ada

SRC_R=Origin1
DEST_R=Origin2
for cbranch in $(git branch -r | grep $SRC_R | cut -d '/' -f2,3,4,5 | cut -d ' ' -f1)
do
    git checkout $cbranch
    git Push $DEST_R $cbranch
done

Ubah saja Origin1 ke sumber remote, dan Origin2 ke tujuan remote. Salin ini ke "remoteBranchCloner.sh" dan menyebutnya dengan "sh callBranchCloner.sh".

Mungkin ada cara lebih baik, itu tidak berhasil beberapa dorongan.

Jika Anda menggunakan kode saya, Anda mungkin ingin menggunakan caching kredensial, jika tidak, Anda harus mengetikkan kredensial serveral Anda kali.

ntuk windows:

Catatan: Skrip ini untuk linux. Jika Anda jalankan di "git bash" skrip akan berfungsi, tetapi Anda tidak dapat menjalankannya dari konsol asli tanpa menginstal sesuatu yang istimewa.

git config [--global] credential.helper wincred

ntuk linux

git config [--global] credential.helper cache

Di mana [--global] berarti secara opsional tambahkan --global

Jika Anda ingin mengatur pelacakan jarak jauh untuk semua cabang ke remote baru:

DEST_R=remotename
for cbranch in `git branch`
do
    git checkout $cbranch
    git branch -u guru/$cbranch
done

Disimpan sebagai file .sh dan dijalankan dengan "sh filename.sh" akan mengatur semua upstreams untuk melacak 'remotename' jarak jauh

0
csga5000