Как создать каталог транка в существующем репозитории SVN без транка и переместить все файлы в новый транк? - PullRequest
4 голосов
/ 18 июня 2010

У меня есть репозиторий SVN без директории транка. Я хотел бы создать каталоги стволов и веток и переместить все мои файлы (в настоящее время в корне) в ствол.

Создание сундука работает просто отлично:

macbook[601]  # svn mkdir trunk
A         trunk
macbook[602]  # svn commit trunk
Adding         trunk
Committed revision 67.

переместить все в багажник не удалось:

macbook[604] # svn move * trunk
svn: Cannot copy path 'trunk' into its own child 'trunk/trunk'

есть ли способ сделать это без указания всех имен файлов и каталогов по отдельности? Есть потоки, описывающие, как сделать это с TortoiseSVN, но я хотел бы знать, как это сделать с помощью командной строки svn.

Спасибо.


EDIT

W. Крейг, спасибо за быстрый и полезный ответ.
Я столкнулся с некоторыми осложнениями; возможно, кто-то может дать мне несколько советов о том, как их решить.

Я начал со всего современного, включая пустой каталог "trunk". У меня также было несколько файлов, которые не управляются SVN:

note: Прежде чем пытаться это сделать, я переместил некоторые файлы в подкаталог «notes» и успешно зафиксировал это изменение. Я могу дать более подробную информацию, если это будет полезно.

macbook[582] ~/dev/dictionary # svn stat
?       vendor/plugins/redbox_broken
?       config/database.yml
?       lib/dict.rb.original
?       public/javascripts/redbox.js.big
macbook[583] ~/dev/dictionary # ll
total 64
drwxr-xr-x   3 stupakov  stupakov    102 Jun 17 22:05 MISC
-rw-r--r--   1 stupakov  stupakov  10011 Oct 18  2009 README
-rw-r--r--   1 stupakov  stupakov    307 Oct 18  2009 Rakefile
-rw-r--r--   1 stupakov  stupakov   9514 Jun 17 22:05 TO_DO.txt
drwxr-xr-x   7 stupakov  stupakov    238 Mar 11 21:07 app
drwxr-xr-x  11 stupakov  stupakov    374 Jun  5 16:02 config
drwxr-xr-x   7 stupakov  stupakov    238 Jun 17 22:05 db
drwxr-xr-x   4 stupakov  stupakov    136 Oct 18  2009 doc
drwxr-xr-x   6 stupakov  stupakov    204 Oct 18  2009 features
drwxr-xr-x  17 stupakov  stupakov    578 Jun 17 20:51 lib
drwxr-xr-x   4 stupakov  stupakov    136 Apr  4 20:04 log
drwxr-xr-x   6 stupakov  stupakov    204 Oct 18  2009 nbproject
drwxr-xr-x   9 stupakov  stupakov    306 Jun 17 21:55 notes
drwxr-xr-x  11 stupakov  stupakov    374 Oct 18  2009 public
drwxr-xr-x  15 stupakov  stupakov    510 Oct 18  2009 script
drwxr-xr-x  13 stupakov  stupakov    442 Oct 18  2009 spec
drwxr-xr-x   7 stupakov  stupakov    238 Oct 18  2009 stories
drwxr-xr-x   9 stupakov  stupakov    306 Oct 18  2009 test
drwxr-xr-x   7 stupakov  stupakov    238 Feb 17 22:46 tmp
drwxr-xr-x   3 stupakov  stupakov    102 Jun 17 22:05 trunk
drwxr-xr-x   5 stupakov  stupakov    170 Apr  3 20:10 vendor
-rw-r--r--   1 stupakov  stupakov   1151 Sep 26  1998 whale.gif
macbook[584] ~/dev/dictionary # ll trunk

Я попытался "переместить" все svn в багажник.

macbook[585] ~/dev/dictionary # echo $(cat ~/flist)
README Rakefile app config db doc features lib log nbproject notes public script spec stories test tmp vendor whale.gif
macbook[586] ~/dev/dictionary # svn move $(cat ~/flist) trunk

Ответом от SVN был длинный список файлов, запланированных для добавления и удаления.

Затем я получил ошибку при попытке совершить это.

macbook[589] ~/dev/dictionary # svn commit -m "moving everything to trunk subdir"
Deleting       README
Deleting       Rakefile
Deleting       app
Deleting       config
Deleting       db
Deleting       doc
Deleting       features
Deleting       lib
Deleting       log
Deleting       nbproject
Deleting       notes
svn: Commit failed (details follow):
svn: Item '/dictionary/notes' is out of date

А теперь у «заметок» есть конфликт

macbook[597] ~/dev/dictionary # svn stat notes
D     C notes
      >   local delete, incoming edit upon update
D       notes/HACKATHON
D       notes/newsgroup_questions.txt
D       notes/svn_rails.sh
D       notes/mysql_notes.txt
D       notes/HOW
D       notes/css_notes.txt

Я попытался обновить «заметки» до более ранней версии, но конфликт не позволил этого:

macbook[606] ~/dev/dictionary # svn up notes -r 68
   C notes
At revision 68.
Summary of conflicts:
  Tree conflicts: 1

Затем я попытался «разрешить svn» конфликт:

macbook[612] ~/dev/dictionary # svn resolve --accept=working notes
Resolved conflicted state of 'notes'
macbook[613] ~/dev/dictionary # ll notes
macbook[614] ~/dev/dictionary # svn stat notes -v
D               68       70 stupakov     notes
D               70       70 stupakov     notes/HACKATHON
D               70       70 stupakov     notes/newsgroup_questions.txt
D               70       70 stupakov     notes/svn_rails.sh
D               70       70 stupakov     notes/mysql_notes.txt
D               70       70 stupakov     notes/HOW
D               70       29 stupakov     notes/css_notes.txt

Я подумал, что должен вернуться, а не совершать запланированный ход на случай, если что-то еще испортилось, поэтому я сделал это:

macbook[630] ~/dev/dictionary # svn revert .

Однако добавления и удаления по-прежнему запланированы.

Буду признателен за любые предложения о том, как сделать следующее:

1) Привести мою локальную копию в состояние, в котором она находилась до выполнения команды "svn move list_of_dirs trunk"

2) Убедитесь, что каталог «notes» обновлен и не мешает «svn move»

3) Успешно переместить все каталоги из моего корневого каталога в «багажник»

Большое спасибо.

1 Ответ

4 голосов
/ 18 июня 2010

Вы используете MacBook, поэтому давайте предположим, что bash для вашей оболочки:

# Select all the relevant files/directories (less trunk, branches, and tags)
ls * | egrep -v "trunk|branches|tags" > /tmp/files

# Move them within the repository
svn move $(cat /tmp/files) trunk

Это будет работать до тех пор, пока у вас нет пробелов в именах файлов.Если вы это сделаете, то используйте это вместо:

# Select all the relevant files/directories (less trunk, branches, and tags)
ls * | egrep -v "trunk|branches|tags" > /tmp/files

# Move them within the repository
cat /tmp/files | while read file ; do
    svn move "${file}" trunk
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...