GIT veri havuzunu bir sunucudan yeni bir sunucuya taşıma


263

İndirdiğim bir sunucum var. Göç etmek için bıraktığım tek şey depom. Bu sunucu, projelerimden birinin kaynağı (ana) olarak listeleniyor. Tarihi korumak için veri havuzunu taşımanın doğru yolu nedir?


Depo ile ilgili tüm bilgiler (orgin, trunk, vb.), Depoyu başlattığınız '.git' adlı bir klasörde saklanır. Yani, burada
Mansab Uppal

1
sadece git config remote.origin.url newurl bkz. stackoverflow.com/questions/3011402/…
Niels

1
Reponuzu taşımak istiyorsanız ve tüm şubeler kabul edilen cevaptan ziyade jzwiener veya Roberto tarafından verilen cevapları kullanırlar.
jonaglon

Yanıtlar:


247

Yeni repo konumunu eklemek için,

git remote add new_repo_name new_repo_url

Ardından içeriği yeni konuma itin

git push new_repo_name master

Sonunda eskisini kaldırın

git remote rm origin

Bundan sonra bdonlan'ın söylediklerini yapabilir ve new_repo_name kökeni değiştirmek için git / config dosyasını düzenleyebilirsiniz. Başlangıç ​​noktasını (orijinal uzak depo) kaldırmazsanız, yalnızca yeni repodaki değişiklikleri

git push new_repo_name master

8
Bu sadece eski depodan yeni bir şubeye tek bir dalı mı kopyalar?
Andrew Grimm

34
Tüm şubeleri göç ettirmenin çözümü nedir?
emmby

50
Tüm dalları bir kerede itebilmelisiniz git push -u new_repo_name --all.
rmarscher

10
Tüm şubelerin
göçünü

10
Git-config dosyasını düzenlemek yerine, bu komut benim için çalıştı:git remote rename new_repo_name origin
Salim

210

Tüm dalları ve etiketleri taşımak istiyorsanız aşağıdaki komutları kullanmalısınız:

git clone --mirror [oldUrl]

eski repoyu tüm şubelerle klonlamak

cd the_repo
git remote add remoteName newRepoUrl

yeni bir uzaktan kumanda kurmak

git push -f --tags remoteName refs/heads/*:refs/heads/*

tüm referansları ref / başların altına itmek (muhtemelen istediğiniz şeydir)


5
Git bundan şikayet ediyordu --tagsve refs/heads/*:refs/heads/*uyumlu değil --mirror. stackoverflow.com/a/26552740/1484831 iyi çalıştı.
Avigit

3
Bunu kullandım ve benim için çalıştı. Muhtemelen seçilmiş cevap olmalı. Yerel olarak aldığınız "kodun" bir şey ters gittiğinde yeni başlayanlar için belirsiz hale getiren meta veriler üzerinde ağır gibi göründüğünü unutmayın.
nick

3
Bu onaylanmış cevap olmalıdır. Diğer çözümlerden çok daha iyi
Travis Griggs

15
Ben yeni uzak refs/heads/refs/headsgit push -f --tags remoteName refs/heads/*:refs/heads/*git push remoteName --mirror
depomda

1
pushAyrıca destekler --mirror. git clone --mirror; cd repo; git push --mirror new_remotehile yapmalı
knittl

143

Bu benim için kusursuz çalıştı .

git clone --mirror <URL to my OLD repo location>
cd <New directory where your OLD repo was cloned>
git remote set-url origin <URL to my NEW repo location>
git push -f origin

Bununla birlikte, bu durumun mevcut deponuzun bir aynasını oluşturduğunu ve sonra bunu yeni konuma ittiğini belirtmeliyim. Bu nedenle, büyük depolar veya yavaş bağlantılar için biraz zaman alabilir .


15
*** Bu ***
Paul Lockwood

1
Bu iyi bir çözüm git uzak set-url kökeni <YENİ repo konumuma URL> (eski kökeni yeni sunucuya / konuma rsync'ed ettikten sonra)
Toni Homedes i Saun

2
Bu harika. Kafa karıştırıcı çoklu kumanda yok
TaoPR

16
Tercih git push --mirror originüzerinde -f.
Aidiakapi

78

Kopyalayın. Gerçekten bu kadar basit. :)

İstemci tarafında, uzaktan kumandalarınızı gerektiği gibi yeni URL'ye yönlendirmek için istemcinin yerel deposundaki .git / config dosyasını düzenleyin.


6
Ayrıca sadece klonlayabilirsiniz. Ayrıca, .git / config dosyasını doğrudan düzenlemek yerine git remote rm origin; uzak kökeni ekle <new repository>.
ebneter

4
uzaktan kumandanın çalıştırılması, yapılandırmanın bu bölümü altındaki herhangi bir yapılandırmayı kaybeder - ve fazladan bir adım atmadan klonlanması, gövde dışındaki dalları kaybeder. Bu sorunlarla başa çıkmak mümkündür, ama gerçekten - sadece rsync.
bdonlan

1
İşi yapmak için sadece git kullanan çözüm nedir? rsync atlamak zor ek idari çemberler gerektirir
emmby

2
Bu da örneğin kancaları ve diğer yapılandırmayı korur, bu yüzden saf git çözümlerine tercih ederim
mnagel

65

Bu, diğer cevapların bazı bölümlerinde yapılır.

git clone --mirror git@oldserver:oldproject.git
cd oldproject.git
git remote add new git@newserver:newproject.git
git push --mirror new

6
Bu aslında en eksiksiz, en basit cevaptır.
Lawrence Dol

3
--mirror
baskıda

Yeni sunucudaki yeni havuzu başlattığınızda, çıplak bir başlangıç ​​yapmayı unutmayın, yoksa push başarılı olmaz:git init --bare
marco

35

Sadece basit bir talimatlar listesi ile başkalarının söylediklerini yeniden gönderiyorum.

  1. Depoyu taşıyın: Yeni sunucuya, cdşimdi depoyu tutmak istediğiniz ana dizine giriş yapın rsyncve eski sunucudan kopyalamak için kullanın :

    new.server> rsync -a -v -e ssh user@old.server.com:path/to/repository.git .
    
  2. İstemcilerin yeni havuzu göstermesini sağlayın: Şimdi havuzu kullanan her istemcide, işaretçiyi eski başlangıç ​​noktasına kaldırın ve yenisine ekleyin.

    client> git remote rm origin
    client> git remote add origin user@new.server.com:path/to/repository.git
    

Basit ve etkili. Sunucular arasındaki trafiği sınırlamak istiyorsanız --bwlimit = XXX işaretini ekleyebilirsiniz; burada XXX, bant genişliğini saniyede KBayt olarak eşitler.
Greg Glockner

7
Kaldırıp eklemekten biraz daha iyi:git remote set-url origin user@new.server.com:path/to/repository.git
Chris KL

Git + capistrano kullanarak bir sunucuya dağıtım yapanlar için set-url orijinini 2 yerde kullanmak zorunda olduğumu unutmayın: localhost üzerinde ve sunucudaki önbelleğe alınmış kopyada.
anandvc


10

Orada tüm şubeleriyle bir repo taşımak için BitBucket'teki talimatları izledim. İşte #karakteri izleyen açıklamalarla birlikte adımlar :

cd path/to/local/repo
git remote remove origin # to get rid of the old setting, this was not in the BitBucket instructions
git remote add origin ssh://git@bitbucket.org/<username>/<newrepo> # modify URL as needed
git push -u origin --all # pushes _ALL_ branches in one go
git push -u origin --tags # pushes _ALL_ tags in one go

Benim için iyi çalıştı.


8

Lütfen adımları izleyin:

  • git remote yeni menşe ekle
  • git push - tüm yeni kökenli
  • git push - yeni menşeli etiketler
  • git rm menşei
  • git remote newame yeni kökeni yeniden adlandır

5

Bu bir çeşidi bu cevap şu anda önerdiği, gitlab "taşınamayacak" başka bir sunucudan bir git deposuna.

  1. Eski projenizin çağrıldığını existing_repo, bir existing_repoklasörde saklandığını varsayalım .

  2. Yeni sunucunuzda bir repo oluşturun. Bu yeni projenin URL'siningit@newserver:newproject.git

  3. Bir komut satırı arabirimi açın ve aşağıdakileri girin:

    cd existing_repo
    git remote rename origin old-origin
    git remote add origin git@newserver:newproject.git
    git push -u origin --all
    git push -u origin --tags
    

Bu yaklaşımın avantajları, eski sunucunuza karşılık gelen dalı silmemenizdir.


4

Aşağıdaki komutu kullanabilirsiniz:

git remote set-url --push origin new_repo_url

Http://gitref.org/remotes/ adresinden bir örnek

$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/github/git-reference.git (push)
$ git remote set-url --push origin git://github.com/pjhyett/hw.git
$ git remote -v
github  git@github.com:schacon/hw.git (fetch)
github  git@github.com:schacon/hw.git (push)
origin  git://github.com/github/git-reference.git (fetch)
origin  git://github.com/pjhyett/hw.git (push)

4

Şu kadar basit olmalı:

git remote set-url origin git://new.url.here

Bu şekilde originyeni repo'nuzun adını korursunuz - daha sonra diğer repolara ayrıntılı olarak eski repoya itin. Yalnız çalıştığınızı ve içindeki tüm rüzgârınızla yansıtmak istediğiniz yerel bir repoya sahip olduğunuzu varsayarsak, (yerel repodan da)

git push origin --mirror # origin points to your new repo

ama "git push --mirror" veri havuzumu yedeklemek için yeterli mi? ( --mirrortoplamda bir kez kullanmayın ).


3

bu talimatları izleyin Tüm taahhütleri ve şubeleri eskiden yeni repoya tutmak istiyorsanız

git clone --bare <old-repo-url>
cd <old-repo-directory>
git push --mirror <new-repo-url>


1

Bir kaynaktan diğerine geçmek ve aynı zamanda yerel makinenizde mevcut kaynağınızın yedeğini tutmak istiyorsanız şu adımları kullanabilirsiniz:

  1. Önce yerel olarak taşımak istediğiniz (git) klasörüne gidin
  2. Yeni deposu çevrimiçi oluşturma Bu adım, kodu gönderebileceğimiz bir havuz oluşturur

Şimdi klasörde

git remote get-url origin

Yukarıdaki komut, geçerli uzak kaynak url'yi verir ve başlangıç ​​adımını son adımda geri ayarlamak için yararlıdır

git remote set-url origin git@github.newlocation:folder/newrepo.git

Yukarıdaki komut uzak kaynağı yeni konuma ayarlar

git push --set-upstream origin develop

Yukarıdaki komut, geçerli etkin yerel dalı, branchname geliştirmesi ile uzaktan kumandaya iter. Tabii ki tüm tarih korunur git gibi tüm tarih de itilir.

git remote set-url origin <original old origin>

Yukarıdaki komut, uzak kökeni geçerli kökeninize geri döndürür: Bunu, mevcut klasörünüzde olduğunuz için ve muhtemelen geçerli yerel klasör adınızı, repoyu klonlamak için oluşturacağınız yeni klasörle karıştırmak istemediğinizden Sadece ittiniz.

Bu yardımcı olur umarım,


0

Bir #git deposunu bir sunucudan yenisine taşımak istiyorsanız, bunu şu şekilde yapabilirsiniz:

git clone OLD_REPOSITORY_PATH
cd OLD_REPOSITORY_DIR
git remote add NEW_REPOSITORY_ALIAS  NEW_REPOSITORY_PATH
#check out all remote branches 
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
git push --mirror NEW_REPOSITORY_PATH
git push NEW_REPOSITORY_ALIAS --tags

Eski depodaki tüm uzak dallar ve etiketler yeni depoya kopyalanacaktır.

Bu komutu tek başına çalıştırmak:

git push NEW_REPOSITORY_ALIAS

yalnızca bir ana kolu (yalnızca izleme dalları) yeni depoya kopyalar.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.