#iphone #objective-c #ios #svn
#iPhone #objective-c #iOS #svn
Вопрос:
Я добавил некоторые файлы в репозиторий svn во время первоначальных изменений. Но теперь эти файлы исчезли, и это было сделано путем их удаления непосредственно в xcode 4.2. Но они все еще существуют в svn, и я хочу обновить репозиторий svn до версии моего локального проекта. Я знаю, что мог бы использовать команду svn rm для удаления каждого файла, но идея об этом меня раздражает, потому что мне нужно будет находить, выбирать и удалять каждый файл вручную. Есть менее болезненные решения?
ps. также приветствуются любые советы о том, как проверить разницу между локальным проектом и репозиторием svn. В настоящее время, если я выполняю обновление, xcode сообщает, что моя локальная копия обновлена, поэтому мне приходится даже вручную находить недостающие файлы.
Ответ №1:
Если вы не против зайти в командную строку, вы можете запустить svn status
и найти удаленные файлы. Они будут начинаться с восклицательного знака. Вот пример из репозитория, с которым я только что работал:
$ svn status
! subversion/pre-commit-kitchen-sink-hook.html
! subversion/svn-watch.html
! bludgen/bludgen.html
! duplicate-properties-files/fixup.html
! cvstools/group.html
! cvstools/find-branch-usage.html
A cvstools/someprogram.py
M cvstools/find-branch-usage.pl
! cvstools/scramble.html
M cvstools/findNames.pl
Теперь все, что вам нужно сделать, это найти названия программ. Если в именах ваших программ нет пробелов, достаточно простого скрипта [awk]:
$ svn status | awk '/^!/ {print $2}'
subversion/pre-commit-kitchen-sink-hook.html
subversion/svn-watch.html
bludgen/bludgen.html
duplicate-properties-files/fixup.html
cvstools/group.html
cvstools/find-branch-usage.html
cvstools/scramble.html
Теперь, когда у вас есть список программ, вы можете запустить его xargs
в svn rm
команду:
$ svn status | awk '/^!/ {print $2}' | xargs svn rm
D subversion/pre-commit-kitchen-sink-hook.html
D subversion/svn-watch.html
D bludgen/bludgen.html
D duplicate-properties-files/fixup.html
D cvstools/group.html
D cvstools/find-branch-usage.html
D cvstools/scramble.html
К счастью, компьютеры Mac поставляются с клиентом командной строки Subversion. Это приведет к удалению файлов, которые вы вручную удалили с помощью Subversion, и позволит вам зафиксировать ваши изменения. Затем вы сможете обновить свою копию репозитория последним кодом. Могут быть некоторые конфликты (вы удалили файл, который кто-то обновил в более поздней версии), но они должны быть довольно управляемыми.
Вы можете использовать svn diff
для поиска различий между вашей текущей рабочей копией и головной редакцией репозитория. К сожалению, --summarize
параметр работает только в том случае, если вы выполняете различие между репозиториями. Однако вы можете отфильтровать файлы, которые отличаются, используя grep
для поиска строк, начинающихся с Index:
:
$ svn diff -rHEAD | grep "^Index:"
Index: windows-tools/which.pl
Index: subversion/pre-commit
Index: subversion/README
Index: subversion/control.ini
Index: subversion/pre-commit-kitchen-sink-hook.html
Index: subversion/svn-watch.html
Index: cvstools/findNames.pl
Index: cvstools/group.html
Index: cvstools/find-branch-usage.html
Index: cvstools/someprogram.py
Index: cvstools/find-branch-usage.pl
Index: cvstools/scramble.html
Index: bludgen/bludgen.html
Index: duplicate-properties-files/fixup.html
Единственная реальная проблема заключается в том, совместим ли клиент Subversion, который использует XCode, с клиентом командной строки Subversion. Например, клиент VisualStudio Subversion использует _svn
в качестве имени информационных каталогов Subversion, в то время как клиент командной строки использует .svn
.
Я считаю, что клиент Subversion XCode совместим с версией 1.6.x клиента командной строки Subversion (и даже с более ранними версиями вплоть до версии 1.4), но не с последней версией Subversion 1.7.
Если вы не вмешивались в установку Subversion на вашем Mac, все должно быть в порядке.
Комментарии:
1. Превосходно. Спасибо за такое потрясающее руководство по использованию команд svn. Это определенно способ решить мою проблему. Надеюсь, в будущем в xcode будет более удобная интеграция функций svn 🙂 GL.
Ответ №2:
Единственный известный мне способ сделать то, что вы пытаетесь, это:
- Перейти к файлу-> Управление версиями-> Репозитории
- Выберите свой репозиторий
- Нажмите Фиксацию
- Щелкните значок плоского представления (слева)
- Все отсутствующие файлы отображаются как !, и вы можете щелкнуть правой кнопкой мыши, чтобы отменить изменение.
РЕДАКТИРОВАТЬ — Извините, я неправильно понял проблему. Это может помочь вам найти недостающие файлы, но не поможет вам зафиксировать. Я думал, вы пытаетесь восстановить удаления, а не зафиксировать их.
Комментарии:
1. Спасибо, это должно быть немного, по крайней мере, для поиска отсутствующих файлов.
2. Кроме того, я обнаружил, что, выбрав там отсутствующие файлы и выбрав отменить изменения, предупреждения xcode об отсутствующих файлах исчезают.
3. Да, это восстановит файлы локально.