Мне это тоже нужно было, и с помощью ответа Бомбе + немного повозиться, я заставил его работать. Вот рецепт:
1. cd /path/to/git/localrepo
2. svn mkdir --parents protocol:///path/to/repo/PROJECT/trunk -m "Importing git repo"
3. git svn init protocol:///path/to/repo/PROJECT -s
4. git svn fetch
5. git rebase origin/trunk
5.1. git status
5.2. git add (conflicted-files)
5.3. git rebase --continue
5.4. (repeat 5.1.)
6. git svn dcommit
После # 3 вы получите загадочное сообщение, подобное этому:
Использование более высокого уровня URL: протокол
: /// path / to / repo / PROJECT => protocol: /// path / to / repo
Просто игнорируйте это.
Когда вы запустите # 5, вы могли бы получить конфликты. Решите их, добавив файлы с состоянием «unmerged» и возобновив их перебазирование. В конце концов, вы закончите; затем выполните синхронизацию с репозиторием SVN, используя dcommit
. Вот и все.
Теперь вы можете синхронизироваться из SVN в Git, используя следующие команды:
git svn fetch
git rebase trunk
А для синхронизации из Git в SVN используйте:
git svn dcommit
Вы можете хочу попробовать это на локальной копии, перед применением в живом хранилище. Вы можете сделать копию своего репозитория Git во временное место; просто используйте cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий для тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверить рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неверным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду снова. Однако вы можете отменить изменения, выполнив:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем можно запустить git svn init
заново.
cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий для тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверить рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неверным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду снова. Однако вы можете отменить изменения, выполнив:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем можно запустить git svn init
заново.
cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий для тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверить рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неверным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду снова. Однако вы можете отменить изменения, введя:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем вы можете запустить git svn init
заново.
cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий для тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверить рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неверным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду снова. Однако вы можете отменить изменения, введя:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем вы можете запустить git svn init
заново.
cp -r
, так как все данные находятся в самом хранилище. Затем вы можете настроить файловый репозиторий для тестирования, используя:
svnadmin create /home/name/tmp/test-repo
И проверить рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неверным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду снова. Однако вы можете отменить изменения, введя:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем вы можете запустить git svn init
заново.
svnadmin create /home/name/tmp/test-repo
И проверьте рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неправильным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду очередной раз. Однако вы можете отменить изменения, введя:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем вы можете запустить git svn init
заново.
svnadmin create /home/name/tmp/test-repo
И проверьте рабочую копию, используя:
svn co file:///home/name/tmp/test-repo svn-working-copy
Это позволит вам поиграться с вещами, прежде чем вносить какие-либо длительные изменения.
git svn init
Если вы случайно запустили git svn init
с неправильным URL, и вы не были достаточно умны, чтобы сделать резервную копию вашей работы (не спрашивайте ...), вы не можете просто запустить ту же команду очередной раз. Однако вы можете отменить изменения, выполнив:
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем можно запустить git svn init
заново.
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем можно запустить git svn init
заново.
rm -rf .git/svn
edit .git/config
И удалите раздел section [svn-remote "svn"]
.
Затем можно запустить git svn init
заново.
Можно сделать новый репозиторий SVN. Экспортируйте свой проект Мерзавца (излагающий в деталях .git файлы). Добавьте его к репозиторию SVN (инициализирующий репозиторий с тем, что Вы имели до сих пор в Мерзавце). Тогда используйте инструкции для импорта репозиториев SVN в новом проекте Мерзавца.
, Но это потеряет Вашу предыдущую историю Мерзавца.
character in repeated
станет медленным, поскольку repeated
содержит все больше элементов.
– Mark Byers
18 February 2010 в 01:05
Если Вы хотите продолжить работать с Мерзавцем как Ваш основной репозиторий и просто должны "экспортировать" изменения SVN время от времени, Вы могли использовать Адаптация для хранения репозитория SVN в синхронизации. Это может скопировать изменения между системами управления другого источника и обновило бы SVN с изменениями, которые Вы вносите в Мерзавце.
я не попробовал преобразование Git-to-SVN, но для SVN->, пример SVN видит этот ответ .
ValueError
. Я предполагаю that' s довольно корректный способ обработать пустую последовательность, как он doesn' t имеют смысл просить первое не у повторенного символа в ""
– John La Rooy
1 October 2012 в 23:14
Создайте новый каталог в репозитории Подрывной деятельности для Вашего проекта.
# svn mkdir --parents svn://ip/path/project/trunk
Изменение в Вашем управляемом Мерзавцами проекте и инициализируют мерзавца-svn.
# git svn init svn://ip/path/project -s
# git svn fetch
Это создаст единственную фиксацию, потому что Ваш каталог проекта SVN все еще пуст. Теперь повторно основывайте все на той фиксации, git svn dcommit
, и Вы должны быть сделаны. Это серьезно испортит Ваши даты фиксации, все же.
Использование git rebase
напрямую приведет к потере первый коммит Git рассматривает его по-разному и не может перебазировать его.
Существует процедура, которая сохранит полную историю: http://kerneltrap.org/mailarchive/git/2008/10/26/3815034
I здесь мы расшифруем решение, но кредиты предназначены для Бьёрна.
Инициализируйте git-svn:
git svn init -s --prefix=svn/ https://svn/svn/SANDBOX/warren/test2
--prefix дает вам ветки удаленного отслеживания, такие как «svn / trunk», что хорошо, потому что вы не получите двусмысленных имен, если будете называть вашу локальную ветку просто «trunk». А -s
является ярлыком для стандартного макета ствола / тегов / ветвей.
Извлеките исходный материал из SVN:
git svn fetch
Теперь посмотрите хэш вашего корневого коммита (должен отображаться один коммит ):
git rev-list --parents master | grep '^.\{40\}$'
Затем получите хеш пустого коммита ствола:
git rev-parse svn/trunk
Создайте трансплантат:
echo <root-commit-hash> <svn-trunk-commit-hash> >> .git/info/grafts
Теперь «gitk» должен показать svn / trunk
как первый коммит, на котором ваша ветвь master
Сделайте трансплантат перманентным:
git filter-branch -- ^svn/trunk --all
Бросьте трансплантат:
rm .git/info/grafts
Гитк должен по-прежнему показывать svn / trunk
в происхождении мастера.
Линеаризовать вашу историю на вершине ствола :
git svn rebase
А теперь "git svn dcommit -n" должен сказать вам, что он собирается фиксировать транк.
git svn dcommit