Как я могу сделать один SVN коммит через несколько внешних команд в командной строке? - PullRequest
22 голосов
/ 20 апреля 2009

Это может быть невозможно, но я все равно спрошу.

Не вдаваясь в подробности, почему это так, у меня есть две основные проверки, в которых я работаю, одна для ветки выпуска рабочей версии и одна для внешней линии. Каждый из них представляет собой небольшую коллекцию ссылок svn: externals на подпроекты без прямого содержимого в извлеченном каталоге svn.

То есть четыре директивы svn: externals добавляют все содержимое в каждый из каталогов извлечения.

Когда я делаю коммит через Eclipse (/ Subclipse), я могу зафиксировать изменения во всех внешних проектах за один раз, что хорошо, потому что это просто отдельные подпроекты в одном репозитории, и это позволяет мне избежать выполнение 4 отдельных коммитов подряд для одного и того же репо.

Разве нельзя сделать то же самое из командной строки? Коммиты для каждого из внешних объектов, безусловно, можно было бы написать в сценарии и связать с одной командой, но я бы предпочел не загромождать журнал коммитов отдельными коммитами для связанных изменений, если это возможно.

Ответы [ 6 ]

11 голосов
/ 20 апреля 2009

Вы можете указать все файлы и папки, которые вы хотите зафиксировать в клиенте командной строки, включая внешние. Поскольку CL не рекурсивно превращается во внешние, вы должны указать их в вашей команде commit отдельно:

svn ci working_copy externals1 externals2 -m "log message"

Хотя не пробовал это. Если это не работает, вы должны указать все измененные файлы и папки отдельно, а не только «корневые» папки внешних элементов.

7 голосов
/ 20 апреля 2009

К сожалению, ваше предположение было верным. Текущий инструмент командной строки Subversion не будет преобразовываться в разрозненные внешние рабочие копии во время фиксации. Eclipse, вероятно, выясняет, что все они имеют один и тот же корень, и все настраивает так, что он выполняет только одну транзакцию фиксации.

Этот недостаток клиента фактически указан в качестве одной из проблем, на которые следует обращать внимание при определении внешних элементов в вашем проекте. Начиная с клиента 1.6.1, это ограничение все еще существует.

4 голосов
/ 02 сентября 2016

С последней версией SVN вы можете сделать: --include-externals

1 голос
/ 28 апреля 2011

Если у вас есть только контент и нет модификаций атрибутов, вы можете сделать что-то вместе:

svn st | egrep "^M" | awk '{print $2}' | xargs svn ci -m 'your message'

Если вы добавили / удалили, ... файлы, вы можете изменить регулярное выражение egrep в соответствии со своими потребностями.

0 голосов
/ 13 января 2014

Я перебираю все внешние объекты и выполняю команду "svn commit" для каждого, например:

for dir in $(svn propget svn:externals . | awk '{print $2}'); do svn commit $dir; done
0 голосов
/ 26 ноября 2010

Вы можете сделать:

svn ci -m"my comment" *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...