仅推送代码库的一部分:git push

18

我开发了一些用于处理我的bibtex数据库和PDF文件的脚本。

为了方便起见,我将数据库和脚本都放在同一个git仓库中(这是我不想改变的事情)。然而,我想让我的脚本可用(例如在github上),但不想让我的数据库或pdf文件可用。尽管如此,我希望脚本在github和本地拥有相同的提交历史记录。

我考虑创建一个github分支,并仅推送此分支。但是,如何将主分支中做出的针对脚本的提交更新到该分支中呢?

还有其他方法吗?

3个回答

12
你可以使用git subtree将scripts目录拆分为一个自己的分支(该子目录具有完整的历史记录),然后将其推送到GitHub上。你可以再次运行git subtree,使拆分的仓库保持最新状态。
举个例子,一旦你安装了git subtree,你可以这样做:
git subtree split --prefix script-directory --branch just-scripts
git push github-scripts just-scripts:master

假设你的脚本存放在script-directory中,且github-scripts是一个指向你为脚本创建的GitHub仓库URL的远程地址。

这看起来很有趣!但是我该如何更新新分支呢?还是我只需在推送后删除它,并再次运行命令以进行下一个推送? - thias
你可以再次运行相同的命令而不删除分支,它应该会更新它(我想)。 - Mark Longair
@Mark,我在想,是否有可能用一行代码实现这个功能——比如git push --split subDir——以简化操作。 - shabunc

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

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

一个注意点:在添加一个同时存在于两个分支中的新文件后进行第一次合并将导致冲突(因为scripts-branch是一个根分支)。所以最好从主分支获取脚本并立即提交。


3
但是我如何将主分支中针对脚本所做的提交更新到该分支呢?可以使用“Cherry-pick”命令将与脚本相关的提交从主分支合并到公共分支中。或者,在自己的分支中编辑脚本,然后在需要时将更改合并到“master”分支中。请参考这里

但是挑选特定提交不是只会获取该提交所做的更改吗?假设我在主分支上进行了几次提交,其中一些与数据库有关,另一些与脚本有关,那么我必须确保选择所有与脚本相关的提交,对吧(不仅仅是最新的)?我想单独创建一个分支并进行合并可能是更好的选择... - thias
@thias:这就是为什么我建议在公共分支而不是“master”中开发脚本。或者使用单独的存储库... - Fred Foo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接