Поддерживает ли git-svn разные ревизии для каждого подкаталога? - PullRequest
1 голос
/ 24 февраля 2011

У меня есть репозиторий, который в настоящее время использует Subversion, но я бы хотел использовать Git локально. Итак, я проверил это с помощью git-svn:

git svn clone <a href="http://localserver/svn/repo" rel="nofollow">http://localserver/svn/repo</a>

Теперь внутри репо у меня есть несколько каталогов:

repo/
    trunk/
        A/
        B/
        C/
    tags/
    branches/

Репозиторий в настоящее время имеет ревизию 100. Я хотел бы оформить ревизию 90 внутри repo/trunk/B, а затем сделать тег для всего репо, чтобы repo/trunk/A был рев 100, repo/trunk/B был рев 90, и repo/trunk/C - это версия 100.

В свн я бы сделал

cd repo/trunk/B
svn update -r90 .

Существует ли эквивалент с использованием git-svn, и могу ли я создать тег, который фиксирует состояние всего хранилища в этот момент?

Я пробовал это:

cd repo/trunk/B
git svn find-rev r90      # yields 18376729f51b71212d94dcba239a2482cda9f3c8
git checkout 18376729f51b71212d94dcba239a2482cda9f3c8 .

И, насколько я могу судить, файлы в repo/trunk/B изменились в соответствии с git status, но файлы в других подкаталогах не изменились. Это правильный путь, или есть более «правильный» путь?

1 Ответ

1 голос
/ 26 февраля 2011

Как вы упомянули выше, вы можете использовать git checkout, чтобы сделать это вручную для файлов в trunk/B. Однако содержимое файла теперь будет отображаться как измененное, и если вы запустите git commit, вы будете повторно передавать содержимое старых файлов в качестве новых файлов.

Это обычно не то, как работает git, и я бы рискнул сказать, что это вообще не то, что вы действительно хотите делать с svn. С помощью git вы хотите, чтобы все рабочее дерево перемещалось вместе, и в результате поддержка частичных проверок или обновления поддерева до другой версии по большей части отсутствует.

Когда возникает сценарий такого рода, вы должны спросить себя, действительно ли A, B и C - это разные "проекты". Когда вы помечаете теги, вы помечаете их вместе или просто помечаете файлы A отдельно от B? Как насчет разветвления? Я обнаружил, что git-репозитории работают лучше всего, когда вы включаете все файлы, необходимые для проекта, но не более того. Ограничение репозиториев до уровня проекта увеличивает некоторую бухгалтерию, но также помогает с гибкостью. Вот почему вы увидите много постов вокруг StackOverflow, в которых обсуждается использование подмодулей и поддеревьев git (две разные концепции) для управления группами репозиториев.

...