git只推送存储库的一部分

时间:2011-10-21 13:16:18

标签: git github

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

为方便起见,我在同一个git存储库中管理数据库和脚本(我不想更改)。但是,我想让我的脚本可用(例如在github上),而不是我的数据库或pdf。不过,我希望在github和本地脚本上都有相同的提交历史记录。

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

还有其他方法吗?

3 个答案:

答案 0 :(得分:11)

您可以使用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。

答案 1 :(得分:3)

  

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

Cherry-pick有关从master到公共分支的脚本的提交。或者,在他们自己的分支中编辑脚本,然后在需要时将更改合并到master

答案 2 :(得分:2)

我按照@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中进行开发,并在我需要数据库的时候与master分支合并。

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