问题 git只推送存储库的一部分


我开发了一些脚本来处理我的bibtex数据库和PDF。

为方便起见,我在同一个git存储库中管理数据库和脚本(这是我不想改变的事情)。但是,我想使我的脚本可用(例如在github上),而不是我的数据库或pdf。不过,我希望在github和本地脚本上都有相同的commit-history。

我想过有一个github-branch并且只推动这个分支。但是,如何通过对主分支中的脚本执行提交来更新分支?

有没有其他方法可以做到这一点?


1948
2017-10-21 13:16


起源



答案:


但是,如何通过对主分支中的脚本执行提交来更新分支?

摘樱桃 与脚本有关的提交 master 进入公共部门。或者,在自己的分支中编辑脚本,然后将更改合并到 master 什么时候需要它们。


2
2017-10-21 13:19



但是,樱桃选择不会只获得此提交所做的更改吗?假设我在master中做了几次提交,有些与db有关,有些与脚本有关,我必须确保选择所有与脚本相关的,对(不仅是最新的)?我想单独的分支与合并是更好的选择...... - thias
@thias:这就是为什么我建议在公共分支中开发脚本而不是 master。或者使用单独的回购... - Fred Foo
好吧,我使用一个单独的分支...... - thias


答案:


但是,如何通过对主分支中的脚本执行提交来更新分支?

摘樱桃 与脚本有关的提交 master 进入公共部门。或者,在自己的分支中编辑脚本,然后将更改合并到 master 什么时候需要它们。


2
2017-10-21 13:19



但是,樱桃选择不会只获得此提交所做的更改吗?假设我在master中做了几次提交,有些与db有关,有些与脚本有关,我必须确保选择所有与脚本相关的,对(不仅是最新的)?我想单独的分支与合并是更好的选择...... - thias
@thias:这就是为什么我建议在公共分支中开发脚本而不是 master。或者使用单独的回购... - Fred Foo
好吧,我使用一个单独的分支...... - thias


你可以用 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 是一个远程,指向仅用于脚本的GitHub存储库的URL。


10
2017-10-21 13:42



这看起来很有趣!但是我如何更新新分支?或者我只是在推送后再删除它并再次运行命令以进行下一次推送? - thias
您可以再次运行相同的命令而不删除分支,它应该更新它(我认为)。 - Mark Longair
@Mark,只是想知道,为了简单起见,可以在一行中执行此操作 - 类似于git push --split subDir。 - shabunc


我按照@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 git@github.com:username/repo.git
$ git push github scripts

现在,我可以在scripts-branch中进行开发,并在需要数据库时与主分支合并。

需要注意的是:在两个分支中添加新文件后的第一次合并将导致冲突(因为scripts-branch是根分支)。所以最好从master分支获取脚本并立即提交它们。


1
2017-10-26 19:54