Как синхронизировать проект с репозиторием svn после удаления локальных файлов в xcode?

#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. Да, это восстановит файлы локально.