SVN Фиксация определенных файлов


219

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

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

Ответы:


331

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

$ 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

1
так, в основном, я должен назвать файлы явно? я не могу просто сказать не трогать этот файл?
0100110010101

16
Вы могли бы сделать: SVN ST | Вырежьте -c 9-> target.txt, затем отредактируйте файл target.txt, чтобы удалить конкретный файл, и используйте параметр --targets, чтобы указать список файлов.
Повторить

17
Я думаю, что моя новая задача - создать ошибку, которая поджигает принтер.
Джеймс Вебстер

3
Это жалко и нелепо. Нет места для постановки. svn addиспользуется для добавления файлов в репозитории.
Кандинский

68

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

$ 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"

+1 за точечный ответ. Changelists действительно путь!
Миро Маркараванес

1
Если вы хотите добавить новые каталоги в список изменений, не забудьте сначала использовать svn add, а затемsvn changelist fix-issue-237 --recursive path/to/directory
Fabian Schmengler

На самом деле списки изменений не могут использоваться с новыми каталогами .... "Subversion в настоящее время не поддерживает использование списков изменений с каталогами."
Фабиан Шменглер,

1
@fschmengler: SVN - ужасный инструмент. Я просто пытался сделать лучшее из плохой работы, которую он делает. Переключиться на мерзавец. : P
jcwenger

10
Я перешел на Git много лет назад и никогда не оглядывался назад. Был вынужден снова использовать svn для клиента, это похоже на бег с мячом и цепью на обеих ногах
Фабиан Шменглер

38

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

svn ci file1 file2 dir1/file3

1
так, в основном, я должен назвать файлы явно? я не могу просто сказать не трогать этот файл?
0100110010101

2
если запускать без аргументов, svn фиксирует все измененные файлы; если запускается с файлом в качестве аргумента, этот файл фиксируется, если при запуске с каталогом
фиксируются

22

Из-за моего состояния подрывной деятельности мне пришлось проявить творческий подход. 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

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


2
Вы также можете использовать grep -v '^~'в черный список, что вы хотите.
Мартин Конечни,

10

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

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


7

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

#!/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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.