Git-SVN: Актуализирайте Git repo от централизиран SVN сървър

Работя по проект, за който всеки използва SVN като централизиран сървър и всеки натиска промените, които прави на този сървър. Искам да използвам Git локално и съм доста нов в git svn. Направих git svn clone от хранилището с git svn clone -r HEAD https://svn.repo/app/branch и искам да направя актуализация чрез git.

Имам нужда от команда „git pull like“, но за да изтегля от конкретна ревизия на репото на SVN сървъра. Също така има ли команда 'fetch like' за извличане от конкретна ревизия на репото на SVN сървъра?

Нямам папки .svn в моя клониран проект и git remote не ми дава нищо. Въпреки това направих git config -l и получавам URL адреса на SVN сървъра, така че по някакъв начин съм свързан със SVN сървъра. Не знам обаче как да донеса или да тегля.

Благодаря!


person Jacob Krieg    schedule 31.05.2013    source източник


Отговори (2)


Най-добрият начин за работа в Subversion Repository чрез Git:

  1. git svn init -s https://svn.repo/app/ myrepo като приемем, че под https://svn.repo/app/ репото съдържа стандартните поддиректории /trunk, branches и tags
  2. Направете git svn fetch в myrepo, докато не бъдат извлечени повече ангажименти (може да отнеме доста време и понякога се прекъсва под Windows).
  3. Поръчайте конкретен Subversion клон или ствол чрез git checkout -b trunk remotes/trunk

След това можете просто да разглеждате, хакнете и ангажирате във вашето Git Repo, съдържащо всички Subversion ангажименти и разклонения.

  • За да изтеглите нови ангажименти от SVN, използвайте git svn rebase
  • За да поставите вашите локални ангажименти в SVN, използвайте git svn dcommit

За да преминете към конкретна версия на Subversion, трябва само да прегледате хронологията чрез git log и да потърсите ангажимент, отразяващ съответния ангажимент на subversion. Можете лесно да забележите ревизията на Subversion в реда git-svn-id: на съобщението за ангажиране. Просто използвайте git checkout <commithash>, за да проверите изрично тази версия.

person bentolor    schedule 31.05.2013
comment
Осъзнавам, че това е стар въпрос/отговор, но когато го направя git svn rebase, не получавам най-новото от SVN. Изглежда, че вижда само SVN ангажименти до момента, в който направих git svn clone. Дори когато направя git svn info, той казва, че последната промяна е била в деня, в който направих клонирането. - person mojave; 02.07.2018
comment
Здравей @mojave. Поне git svn fetch трябва да се свърже и да извлече нови ангажименти от сървъра. Ако преименувате .git/svn, това дори трябва да извлече отново цялата история. Направихте ли кръстосана проверка с svn info <URL>? - person bentolor; 03.07.2018
comment
Благодаря, в крайна сметка клонирах повторно, защото ми свърши времето да свърша работата. Завършването на git-svn клонинга отне 47 часа :) - person mojave; 08.07.2018

Добро начало:

За да извлечете нов svn ангажимент във вашето локално репо: git svn rebase

За да насочите локалния си ангажимент към SVN: git svn dcommit

Вероятно ще трябва да използвате git stash и git stash pop, преди да използвате двете команди по-горе, когато вашето работно копие има некомитирани промени.

person Guillaume Darmont    schedule 31.05.2013