Подтвердить что ты не робот

Как фиксировать все файлы, кроме одного с 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 не имеет встроенного решения для моей проблемы, но я не уверен. Любой другой подход?

4b9b3361

Ответ 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`