Перемещение каталога .git - PullRequest
2 голосов
/ 30 июня 2010

У меня есть репозиторий, который я создал на ранней стадии изучения проекта.Как я узнал больше, я понял, что это создает проблемы, потому что некоторые файлы, которые я хочу отслеживать, не требуются в скомпилированном источнике.Я хотел бы создать новый родительский каталог «project», переместить существующий исходный каталог в этот родительский каталог и перенести файлы, которые не нужно компилировать, в этот родительский каталог.

Это возможно с мерзавцем?Смогу ли я полностью уничтожить все ссылки, так как я также хочу переместить каталог .git/ на родительский уровень?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 30 июня 2010

Один из вариантов - просто перемещать вещи внутри вашего текущего хранилища.

Например, предполагая что-то вроде:

/.git
/lib/lib.c
/lib/lib.h
/test.c
/readme.txt

Вы можете создать новую папку (см. Ниже) ипереместите папку lib и папку test.c в новую (используя git mv).Тогда текущий каталог будет вашим родительским каталогом «проекта», который вы хотите, и весь код будет в новой папке.

/.git
/src/lib/lib.c
/src/lib/lib.h
/src/test.c
/readme.txt

Альтернативой будет git filter-branch, как указано в VonCв комментариях.Используя это, я полагаю, вы могли бы создать реструктурированный репозиторий, в котором не было бы фиксации для перемещений, файлы просто всегда существовали бы в новой структуре.

1 голос
/ 11 февраля 2011

По соглашению с Крисом Шаффером вы можете использовать следующий скрипт для выполнения этих шагов:

fullpath=`pwd`
dirname=`basename $fullpath`

if [ ! -d ./.git ]; then
  echo 'Working directory contains no .git repository. There is nothing to move.'
elif [ -d ../.git ]; then
  echo 'Parent directory already contains a .git repository. Aborting.'
elif [ -d $dirname ]; then
  echo "There's already a $dirname directory. Aborting to be safe."

else  # Enough checking; let's get some work done...

  mkdir $dirname
  shopt -s extglob
  for file in `ls -a | egrep -v [.]git\|^[.]+\$\|^$dirname\$`; do
    git mv $file $dirname/
  done
  mv .git* ..
  mv $dirname/* .
  mv html/.[a-z]* .
  git commit -m "Moved Git repository up one directory"
  rmdir $dirname

fi

Это может быть немного больше проверки, чем необходимо для одноразовой ситуации, но она должна делать свою работу. Вы можете адаптировать его вручную или сохранить как исполняемый скрипт, а затем вызвать его из каталога, содержащего .git.

Очевидно, что другие смогли просто mv .git .., но это не сработало для меня. Сначала я должен выполнить все операции git mv file, а затем переместить все вверх на одну.

Если я сделаю это более надежным в будущем, я опубликую обновления на https://github.com/jcamenisch/dotfiles/blob/master/bin/mv-git-up.

...