保持两个Git分支的特定文件同步

时间:2014-05-31 09:15:15

标签: git github git-branch

我有一个包含master分支中四个文件的存储库:两个项目文件(PHP文件btw)加上README.md.gitignore。我想创建一个额外的分支,它只包含同一提交级别的两个PHP文件。保持这两个分支同步的最佳做法是什么,如果可能,我只想提交一次只更新我的PHP文件?

我之所以要研究这个,是因为我想创建一个名为 dist 的分支,它只附带必要的文件。

2 个答案:

答案 0 :(得分:3)

创建dist分支,记录删除不需要的文件。

git checkout master
git checkout -b dist
git rm .gitignore
git rm README.md
git commit -m "Remove non-dist files"

然后,每次您想要更新dist分支时,只需 rebase

git checkout dist
git rebase master

重播dist提交(您在创建该分支时所做的提交,以及git rm某些文件的位置)master,这意味着它将始终删除额外的文件。

您必须force push it to your remote,但这不是问题,因为没有人应该在该分支上做出贡献。


话虽如此,发布管理通常不是通过分支来维护的,但是脚本能够从源代码打包和释放(这意味着您执行的master分支中的一个脚本是为了复制什么是需要你想要部署的地方。)

答案 1 :(得分:2)

正如@VonC所说,Git并未设置为发布管理或部署工具。你远离第一个注意到它非常接近的东西:-) - 所以很容易让它做你想做的事。

以下是如何使用您想要的内容制作可提交的树,而无需结帐。把它放在.git/post-commit中,也许可以从.git/hooks/post-merge链接到它,然后在分支上自动维护。

#!/bin/sh
files="this.php that/other.php"
branch=pub

# build a tree with selected already-committed content
new_tree=$(
  export GIT_INDEX_FILE=.git/sideband-index
  git read-tree --empty
  git ls-tree HEAD --  $files \
  | git update-index --index-info --add
  git write-tree
);

# commit the new tree to the tip of "$branch"
# if it doesn't match what's already there
current=$(git rev-parse -q --verify $branch:)
test $new_tree != "$current" \
&& git update-ref refs/heads/$branch $(
    git commit-tree ${current:+-p $branch} -m new\ content $new_tree
)

不熟悉的命令(几乎所有这些命令都在这里)都是为脚本编写者使用而构建的命令,它们就是为此而设的。