Git нажмите только часть репозитория

Я разрабатываю несколько скриптов для обработки моих байт-баз данных и PDF файлов.

Для удобства я управляю как базой, так и сценариями в том же репозитории git (вещь, которую я не хочу менять). Тем не менее, я хотел бы сделать мои скрипты доступными (например, на github), но не мои базы данных или pdf. Тем не менее, я хочу иметь одну и ту же историю фиксации как на github, так и локально для скриптов.

Я думал о наличии ветки github и нажать только эту ветку. Но как я могу обновить ветвь с помощью коммитов, выполненных для скриптов в главной ветке?

Есть ли другие способы сделать это?

Ответ 1

Но как бы я обновил ветвь с помощью коммитов, выполненных для скриптов в главной ветке?

Cherry-pick коммиты, относящиеся к скриптам из master в публичный раздел. Или отредактируйте скрипты в своей ветке, затем смените изменения на master, когда они вам понадобятся.

Ответ 2

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

Чтобы привести пример, как только вы установили git subtree, вы можете сделать:

git subtree split --prefix script-directory --branch just-scripts
git push github-scripts just-scripts:master

... предполагая, что ваши сценарии находятся в script-directory, а github-scripts - это удаленный, который указывает URL-адрес вашего репозитория GitHub, предназначенный только для сценариев.

Ответ 3

Я следил за советом, данным @larsmans, и оказалось, что это очень удобно. Вот еще несколько деталей процедуры:


## getting the scripts into a separate branch for github

# create a root branch 'scripts'
git symbolic-ref HEAD refs/heads/scripts
rm .git/index
git clean -fdx   # WARNING: all non-commited files, checked in or not, are lost!
git checkout master script1.py script2.py 
git commit -a -m "got the original scripts"
git checkout master
git merge scripts

# push the scripts branch to github
$ git remote add github [email protected]:username/repo.git
$ git push github scripts

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

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