Как фиксировать все файлы, кроме одного с SVN
Я хочу зафиксировать все измененные файлы, кроме одного, используя Subversion.
Итак, вот сценарий:
$ svn st
M file1
M file2
M file3
M file4
Я могу сделать что-то вроде этого:
svn ci -m "Commit 1" file1 file2 file3
svn ci -m "Commit 2" file4
Но когда большое количество файлов, я пытаюсь упростить свою работу:
svn ci -m "Commit 1" `svn st | awk '{print $2}' | grep -v file4`
svn ci -m "Commit 2" file4
Это решение очень хрупкое, потому что с этим сценарием не работает:
$ svn st
M file1
M file2
D file3
A + file4
Я думаю, что SVN не имеет встроенного решения для моей проблемы, но я не уверен. Любой другой подход?
Ответы
Ответ 1
Вариант 1, AWK:
svn ci -m "Commit 1" `svn st | awk '{print $NF}' | grep -v file4`
svn ci -m "Commit 2" file4
Вариант 2, --targets:
svn ci -m "Commit 1" --targets filesToCommit.txt
svn ci -m "Commit 2" file4
Вариант 3, --changelist:
svn changelist my-changelist file1 file2 file3
svn ci -m "Commit 1" --changelist my-changelist
svn ci -m "Commit 2" file4
Ответ 2
Вы можете сделать это следующим образом:
svn diff file4 > tmp.patch
svn revert file4
svn ci -m "Commit 1"
svn patch tmp.patch
В этот момент все файлы совершаются, кроме file4
Ответ 3
Вы можете несколько улучшить свой подход, добавив свои файлы с помощью script в список изменений и совершив его. Вы можете просмотреть список, чтобы убедиться, что он содержит нужные элементы перед фиксацией.
См. svn changelist --help
и --changelist
в svn ci --help
.
Ответ 4
Завершить все, кроме одного, с помощью списков изменений:
svn changelist my-list -R .
svn changelist --remove file4
svn ci -m "Commit 1" --changelist my-list
svn ci -m "Commit 2" file4
Ответ 5
Хотя я уверен, что вы могли бы решить такое решение, как вы предлагаете использовать более сложную командную строку awk
, так как мы говорим только об одном файле, почему бы не
- Скопируйте файл во временное расположение
-
svn revert
измененный файл, чтобы вернуть оригинал
- Зафиксировать весь репозиторий
- Скопируйте измененный файл обратно
Простой, легкий, быстрый.
Ответ 6
Просто отфильтровать список файлов.
svn ci `ls | grep -v file4`