SVN Здійснення конкретних файлів


219

Чи є спосіб зафіксувати лише список певних файлів (eq лише один із списку файлів, який 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 | cut -c 9-> targets.txt, а потім відредагуйте файл targets.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 для точки відповіді. Список змін - це справді шлях!
Miro Markaravanes

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

Насправді списки змін не можна використовувати з новими каталогами .... "Subversion наразі не підтримує використання списків змін із каталогами."
Fabian Schmengler

1
@fschmengler: SVN - жахливий інструмент. Я просто намагався зробити найкраще з поганої роботи, яку вона робить. Перейти на git. : P
jcwenger

10
Я перейшов на Git багато років тому і ніколи не оглядався. Змушений був знову використовувати svn для клієнта, він відчуває, як бігати з м'ячем та ланцюжком на обох ногах
Fabian Schmengler

38

Фактично ви розміщуєте файли, які ви хочете зробити з командним рядком

svn ci file1 file2 dir1/file3

1
так, в основному, я повинен чітко називати файли? я не можу просто сказати, що не торкайтеся цього конкретного файлу?
0100110010101

2
якщо запустити без аргументів, svn здійснює всі змінені файли, якщо запускається з файлом як аргумент, цей файл запускається, якщо запускається з каталогом, всі змінені файли в каталозі здійснюються
Wienczny

22

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

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

Ця команда говорить, що знайдіть усі рядки, що виводяться svn stцим початком, Mабо Aвиріжте, використовуючи роздільник пробілу, а потім отримайте стовпчики 8 до кінця. Завантажте це у targets.txt і перезапишіть.

Потім змініть targets.txt, щоб далі обрізати список файлів. Тоді біжіть нижче, щоб здійснити:

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

Напевно, це не найпоширеніший випадок використання, але, сподіваємось, це комусь допомагає.


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

10

Окрім того, що чітко перераховувати файли, як показано відмотувати та 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.