git-svn ветвление без копирования каждого подкаталога - PullRequest
4 голосов
/ 19 января 2011

Ствол нашего проекта выглядит примерно так:

trunk/foo
trunk/bar
trunk/baz 

Подкаталоги foo, bar и baz на самом деле не связаны друг с другом, а bar и baz на самом деле довольно огромны.Как мне создать ветку только с помощью foo, чтобы мои ветви выглядели примерно так:

branches/branch1/foo
branches/branch2/foo

Сейчас я делаю ветку на весь ствол, затем удаляю bar и baz, но ядумаю, что это будет проблематично во время слияния, поскольку он попытается удалить bar и baz.Мне бы хотелось, чтобы он был достаточно умен, чтобы знать, что я просто хочу работать с foo и ничего не делать с bar или baz.

Вторичный вопрос, не столь важный, что, если я хочу веткус помощью foo и bar, например:

branches/branch1/foo
branches/branch1/bar

Будет ли сложнее процесс разветвления этих двух папок без разветвления других?

Редактировать: Мне было указано, что я могу использовать SVNср.Это работает, но я надеялся работать с репозиторием git svn, и, насколько я могу судить, ближайший аналог git-svn - svn cp - это ветка git svn, которая автоматически обрабатывает копирование.К сожалению, я не могу найти там никакой опции, которая позволила бы мне разветвлять только конкретный подкаталог.

Ответы [ 4 ]

4 голосов
/ 19 января 2011

Обычно один гигантский svn-репозиторий представлен многими git-репозиториями.Вы должны были использовать git svn init .. -t trunk/foo -b branches/branch1/foo -b branches/branch1/foo и т. Д. Примечание: init, а не clone.Затем отредактируйте .git/config:

[svn-remote "foo"]
    url = http://server.org/svn
    fetch = trunk/foo:refs/remotes/foo/trunk
    branches = branches/*/foo:refs/remotes/foo/branches/*
    tags = tags/*/foo:refs/remotes/foo/tags/*

Затем выполните git svn fetch.Кроме того, вы можете указать --ignore-paths, например, игнорировать каталог docs.

После этого git svn branch должен поступить правильноСм git-svn manual.

2 голосов
/ 19 января 2011

svn copy будет успешно работать на любом уровне в структуре папок.

Просто сделай:

svn cp trunk/foo branches/branch1/foo

Думайте об этом как о типичной файловой системе Unix.

Возможно, вам придется добавить --parents в строку cp, если branch1 еще не существует.

0 голосов
/ 19 января 2011

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

Можете ли вы указать git-клоны на каждый ствол индивидуально и клонировать их таким образом?

0 голосов
/ 19 января 2011

Ветвление в Subversion в основном просто делает копии файлов (но они не действительно копии, так как они не занимают места). Итак:

svn cp svn://server/repo/trunk/foo svn://server/repo/branches/branch1/foo

Вам не нужно копировать каталоги bar и baz, если вы этого не хотите. Кроме того, вы можете скопировать все (так как копирование по сути бесплатно) и проверить только то, что вам нужно:

svn cp svn://server/repo/trunk svn://server/repo/branches/branch1
svn co svn://server/repo/branches/branch1/foo
...