Использование git svn с двумя рабочими деревьями

Я начинаю использовать git в качестве клиента Subversion на работе. На данный момент я использую TortoiseGit, более или менее так же, как раньше использовал TortoiseSvn, но с локальными фиксациями, ветвями, слияниями, перебазированием, сбором вишен.

Это большой проект, и переключение ветки и перекомпиляция всего занимает слишком много времени. Вот почему я хочу иметь два (или более) рабочих дерева, соответствующих двум ветвям проекта Subversion.

Интересно, можно ли разделить папку .git для двух рабочих деревьев (ее 5 ГБ), или мне нужно клонировать репозиторий или, возможно, снова проверить его из подрывной деятельности (это заняло несколько часов).

Из git book кажется, что взаимодействие между двумя git-репозиториями не будет работать, если они также взаимодействуют с svn (я не знаю, относится ли это к моему случаю):

Не переписывайте свою историю и не пытайтесь отправить ее снова, а также не отправляйте ее в параллельный репозиторий Git, чтобы одновременно сотрудничать с другими разработчиками Git. Subversion может иметь только одну линейную историю, и ее очень легко запутать. Если вы работаете в команде, и некоторые используют SVN, а другие используют Git, убедитесь, что все используют сервер SVN для совместной работы — это облегчит вашу жизнь.

Я хотел бы иметь один репозиторий со всеми ветками svn и всеми моими локальными ветками, и я хотел бы иметь несколько рабочих деревьев, чтобы избежать необходимости перестраивать все после переключения веток. Это возможно?

Я мало что знаю о «голых» или «общих» репозиториях, пультах и ​​клонах, базовый пример для настройки был бы очень полезен.


person user2518618    schedule 12.05.2015    source источник
comment
Черепаха звучит как Windows. По крайней мере, в Linux/Unix есть git-new-workdir, который устанавливает несколько символических/жестких ссылок для совместного использования одного каталога .git несколькими рабочими каталогами, см. nuclearsquid.com/writings/git-new-workdir   -  person johannes    schedule 12.05.2015
comment
Да, я на Windows. Я обнаружил, что github.com/joero74/git-new-workdir (из stackoverflow.com /вопросы/24016143/). Оно работает! Мне пришлось запустить cmd от имени администратора, добавить git в путь и запустить скрипт. Он создал ссылки и проверил код. Теперь, если я создам ветку в одном рабочем дереве, я увижу ее в журнале другого рабочего дерева.   -  person user2518618    schedule 12.05.2015
comment
@johannes: если вы опубликуете свой комментарий в качестве ответа, я приму его. Спасибо!   -  person user2518618    schedule 13.05.2015


Ответы (1)


Вот что я наконец сделал:

Как предположил Йоханнес, есть сценарий, который решает мою проблему в Linux (http://nuclearsquid.com/writings/git-new-workdir/). Но я на Windows:

  • загрузите порт сценария для Windows с https://github.com/joero74/git-new-workdir
  • откройте cmd от имени администратора (git устанавливает Git bash, который не будет работать с этим скриптом, вам нужно сделать это с cmd)
  • Добавьте git в путь, если у вас его нет. В моем случае set PATH=%PATH%;"C:\Program Files (x86)\Git\bin"
  • выполнить скрипт. В моем случае у меня есть папка Project (в ней есть папка .git): git-new-workdir.cmd .\Project .\Project2

Это создает новую папку Project2 с рабочим деревом и папкой с именем .git. Эта папка .git имеет ссылки на исходный проект/.git, поэтому, если я делаю некоторые git svn fetch или создаю локальные ветки или что-то еще, обе «копии» обновляются одновременно (без push или pull). Рабочие деревья разные: если я переключаю ветку в одну, то другая не меняется и я могу работать на разных ветках одновременно.

Мне просто нужно помнить, где находится оригинальный .git, и никогда не удалять его.

person user2518618    schedule 14.05.2015