Добавление существующих папок исходного кода в локальный репозиторий Git


Предположим, у меня есть две существующие папки, которые я хочу поместить в систему управления версиями Git. Один называется CurrentProduction, а другой CurrentDevelopment. Будут ли следующие шаги правильными?

  1. создайте новую папку с именем MyProject
  2. git init
  3. переместите содержимое CurrentProduction в MyProject
  4. git add .
  5. git commit -m 'initial master commit'
  6. git checkout -b develop
  7. удалить все файлы в MyProject (за исключением .папка git конечно)
  8. переместите содержимое CurrentDevelopment в MyProject
  9. git add -A
  10. git commit -m 'initial develop commit'
Или есть "другой" путь?
2 4

2 ответа:

  • Делать это так, как вы описываете, не принесет никакого вреда.

  • Вы можете переместить каталог .git в дерево, которое хотите зафиксировать, вместо перемещения дерева в хранилище.

  • Вы можете использовать параметр --work-tree или переменную окружения GIT_WORK_TREE, чтобы действовать так, как если бы вы сделали это:

    git add --work-tree=CurrentProduction -A; git commit ...
    

    Обратите внимание, что его не нужно указывать для команд после add, так как add копирует содержимое в индекс, commit использует индекс, и индекс находится в .git.

В качестве отдельного вопроса обратите внимание, что ваша процедура сделает develop начальную фиксацию дочерней от master начальной фиксации. Это, вероятно, правильно для этого случая; я просто хочу убедиться, что вы знаете, что это не симметрично.

Это хороший способ.

Единственная возможная проблема, если вы посмотрите на историю ветви разработки с git log, у вас будет текущее состояние производственного проекта как last commit (тот, который с "начальным мастер-коммитом"). Что семантически не совсем верно.

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

git init .
git commit --allow-empty -m "initial commit"
# add CurrentProduction content
git add .
git commit -m "initial master commit"

# checkout at the empty commit
git checkout -b develop HEAD^

# no need to delete any files!
# working tree is empty
# add CurrentDevelopment  content
git add .
git commit -m "initial develop commit"