SVN Фиксация определенных файлов - PullRequest
206 голосов
/ 04 октября 2009

Есть ли способ зафиксировать только список определенных файлов (например, только один из списка файлов, которые SVN хочет зафиксировать).

Я работаю на MAC OS X в терминале, без какого-либо пользовательского интерфейса.

Ответы [ 7 ]

318 голосов
/ 04 октября 2009

Конечно. Просто перечислите файлы:

$ svn ci -m "Fixed all those horrible crashes" foo bar baz graphics/logo.png

Я не знаю, как заставить его игнорировать определенный набор файлов. Конечно, если файлы, которые вы хотите зафиксировать, легко перечислены оболочкой, вы можете использовать это:

$ svn ci -m "No longer sets printer on fire" printer-driver/*.c

Вы также можете сделать так, чтобы команда svn прочитала список файлов для фиксации из файла:

$ svn ci -m "Now works" --targets fix4711.txt
61 голосов
/ 04 сентября 2013

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

$ svn changelist fix-issue-237 foo.c 
Path 'foo.c' is now a member of changelist 'fix-issue-237'.

Это сделано, теперь svn хранит вещи отдельно для вас. Это помогает, когда вы манипулируете несколькими изменениями

$ svn status
A       bar.c
A       baz.c

--- Changelist 'fix-issue-237':
A       foo.c

Наконец, скажите, чтобы он зафиксировал то, что вы хотели изменить.

$ svn commit --changelist fix-issue-237 -m "Issue 237"
38 голосов
/ 04 октября 2009

Вы в основном помещаете файлы, которые хотите зафиксировать, в командную строку

svn ci file1 file2 dir1/file3
22 голосов
/ 09 мая 2012

Из-за моего состояния подрывной деятельности мне пришлось проявить творческий подход. svn st показывает M, A и ~ статусы. Я только хотел M и A так что ...

svn st | grep ^[A\|M] | cut -d' ' -f8- > targets.txt

Эта команда говорит, что найти все строки, выводимые с помощью svn st, которые начинаются с M или A, вырезать с помощью разделителя пробелов, затем получить столбцы 8 до конца. Дамп это в target.txt и перезаписать.

Затем измените файл target.txt для дальнейшего сокращения списка файлов. Затем запустите ниже, чтобы совершить:

svn ci -m "My commit message" --targets targets.txt

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

10 голосов
/ 04 октября 2009

Помимо перечисления файлов в явном виде, как показано unwind и Wienczny , вы можете настроить списки изменений и проверить их. Это позволяет вам управлять несвязанными наборами изменений в одной рабочей копии.

Вы можете прочитать о них в онлайн-версии превосходной книги SVN .

7 голосов
/ 31 августа 2011

попробуйте этот скрипт ..

#!/bin/bash
NULL="_"
for f in `svn st|grep -v ^\?|sed s/.\ *//`; 
     do LIST="${LIST} $f $NULL on"; 
done
dialog --checklist "Select files to commit" 30 60 30 $LIST 2>/tmp/svnlist.txt
svn ci `cat /tmp/svnlist.txt|sed 's/"//g'`
1 голос
/ 30 ноября 2015

Я создаю (подпапку) папку с именем «hide», перемещаю файл, который я не хочу передать туда. Затем сделайте мой коммит, игнорируя жалобу на отсутствующий файл. Затем переместите скрытый файл из скрытия обратно в ./

Я не знаю недостатков в этой тактике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...