Как создать репо Git из нескольких каталогов - PullRequest
2 голосов
/ 30 апреля 2020

Я работаю над проектом Asterisk и хотел бы поместить код в Git для отслеживания версий.

Вот 3 каталога, в которых находится код:

  • Asterisk Dialplans: /etc/asterisk/custom
  • Код AGI Asterisk: /var/lib/asterisk/agi-bin
  • Веб-интерфейс: /var/www/html/

Я не хочу отслеживать их как 3 отдельных репо в Git. Как бы я все это поместил в один репо?

Мой гугл фу не придумал ничего уместного.

Ответы [ 3 ]

0 голосов
/ 30 апреля 2020

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

Примерно так ( Пожалуйста, сначала сделайте резервную копию ваших файлов, если вы (или, скорее всего, я) допустили ошибку ):

mkdir -p ~/repos/my-asterisk
mv /etc/asterisk/custom /var/lib/asterisk/agi-bin /var/www/html/  ~/repos/my-asterisk
cd ~/repos/my-asterisk
git init .
git add .
git commit -m "init"
ln -s $PWD/custom /etc/asterisk/custom
ln -s $PWD/agi-bin /var/lib/asterisk/agi-bin
ln -s $PWD/html /var/www/html

У этого есть некоторые недостатки, например:

  • пользователь / группа / права доступа к файлам в репо git должны совпадать 1: 1 с тем, как должна выглядеть ваша система (т. Е. Использование файлов репо git на другом сервере может потребовать точно такой же настройки )
  • при обновлении системных пакетов / вашего дистрибутива / всего, что касается этих каталогов, они будут записывать изменения в вашем git репо. Это может или не может быть то, что вы хотите. Вам придется отслеживать, когда совершать эти изменения (например, git status периодически в этом хранилище).

Это может быть хорошо, если вы используете это только на своем компьютере и сохраняете вещи в git - это просто быстрая мера безопасности.


Вы можете просмотреть:

и когда вы захотите потратить на это серьезное количество времени, вы в конечном итоге прочитаете о системах управления конфигурацией :)

0 голосов
/ 30 апреля 2020

Как уже упоминалось в других ответах, вы можете переместить каталоги в общий родительский каталог и отслеживать его как один репозиторий или использовать субмодульный подход.

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

# Initialize git repo at root
git init /

# Add the directories to be tracked
git add /path/to/directory1 /path/to/directory2

Однако это приводит к тому, что многие файлы не отслеживаться (см. вывод git status), так как хранилище инициализируется в каталоге root. Один из способов игнорировать все эти файлы - добавить их в файл $GIT_DIR/info/exclude.

Откройте редактор, чтобы изменить этот файл /.git/info/exclude на:

# ignores everything under root directory
/*

# except these paths
!/path/to/directory1/*
!/path/to/directory2/*

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

Если выполнено, создайте свой первый коммит

git commit -m "Your commit message"
0 голосов
/ 30 апреля 2020

Это может быть не то, что вы ищете, но вы можете рассмотреть:

  1. Добавление git подмодулей или ...
  2. Перемещение каталогов под тем же родителем git directory

Go в инициализированном репо git, где вы хотите хранить другие репо. Затем, внутри того же каталога, используйте:

git submodule add <repo url>

Например,

git submodule add https://github.com/rust-lang/rust.git

Чтобы найти URL репо, перейдите на главную страницу репо и нажмите «клонировать или загрузить», "затем скопируйте ссылку.

Если это не репо git, вы не можете добавить эти каталоги в тот же репо git. Каждый включаемый вами каталог должен быть подкаталогом инициализированного каталога git. Если они были, то вы можете использовать:

git add <directory path>

Например,

git add ./subdirectory1/subdirectory2
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...