2011-07-09 15 views
10

Od pewnego czasu tworzę kopię lustrzaną repozytorium Subversion do repozytorium Git. Co zawsze działało dobrze. Jednak z powodu awarii serwera wirtualnego i braku kopii zapasowej muszę ponownie skonfigurować zwierciadło. Repozytorium, które muszę śledzić, ma prawie 1200 dużych zatwierdzeń i zawiera wiele plików (co jest głównym powodem, dla którego lustro Git, ponieważ jest o wiele szybsze, aby wyewidencjonować kopię repozytorium).Ponownie włącz dublowanie za pomocą git-svn

Muszę teraz zrobić, aby moje świeżo sklonowane lustro Git ponownie śledzić repozytorium Subversion. Nie mam problemów z dodaniem nowego zdalnego ref, ale nie mogę się domyślić, w jaki sposób można ponownie uruchomić svn commit w gałęzi Git.

Jeden błąd, który wydaje mi się otrzymywać to Unable to determine upstream SVN information from working tree history.

Jak mogę ponownie włączyć dublowanie repozytorium Subversion w istniejącej gałęzi Git, która ma tylko kilka commitów z repozytorium Subversion?

+0

O ile mi wiadomo, nie istnieje prosty sposób aby to zrobić.(I jeśli istnieje skomplikowany sposób, nie wiem o tym). – svick

Odpowiedz

11

Najprostszym sposobem, aby go ponownie uruchomić, jest skopiowanie katalogu .git/svn z oryginału, ponieważ jest to miejsce, w którym śledzone są dodatkowe metadane svn (zakładając, że konfiguracja git-svn jest taka sama).

Jednakże, ponieważ nie masz to spróbuj tego:

  1. git svn init http://hostname/svn/repository z innymi parametrami stosowanych wcześniej (? Może -s)

  2. git checkout ostatni commit z SVN.

  3. Odtworzono git-svn ref: git update-ref refs/remotes/git-svn HEAD (lub jeśli użyto -s, powinno to być refs/remotes/trunk zamiast)

  4. pobierze najnowszą z svn ponieważ obecny popełnić: git svn fetch --parent. To powinno odbudować metadane git-svn dla całej historii.

+0

Dzięki, to się udało! Nie mogę jeszcze nagrodzić nagrody (będę musiał czekać na 9 godzin) – Htbaa

+0

Nie do końca rozumiem fragment "git checkout". Co mam kupić? –

+0

Prawdopodobnym kandydatem jest 'master', chyba że angażujesz się w' master', ponieważ otrzymałeś najnowsze informacje od git-svn. Zasadniczo chcesz "sprawdzić" ostatnie zatwierdzenie, które widzisz w "dzienniku git", który ma informacje SVN w komunikacie zatwierdzenia, aby git-svn mógł podnieść miejsce, w którym zostało przerwane. – dahlbyk

0

znalazłem inny sposób na http://trac.parrot.org/parrot/wiki/git-svn-tutorial:

Dodawanie metadanych git-svn do klonu github

Jeśli chcesz ponownie zapełnić metadane SVN, które mogą być szybko wykonane przez biorąc swój aktualny klon odezwania leto z gihub i dodając to do .git/config

Następnie uruchom to polecenie, aby znaleźć „top popełnić”

git show origin/upstream | head -n 1 

i umieścić które popełnić skrót do pliku .git/literatury/pilotów/bagażniku (oczywiście zastąpić ma z jednej z powyższego polecenia)

echo c85aaa38b99cedb087e5f6fb69ce6d4a6ac57a0b > .git/refs/remotes/trunk 

i wreszcie

git svn fetch 
Powiązane problemy