我有一个包含master分支中四个文件的存储库:两个项目文件(PHP文件btw)加上README.md
和.gitignore
。我想创建一个额外的分支,它只包含同一提交级别的两个PHP文件。保持这两个分支同步的最佳做法是什么,如果可能,我只想提交一次只更新我的PHP文件?
我之所以要研究这个,是因为我想创建一个名为 dist 的分支,它只附带必要的文件。
答案 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
)
不熟悉的命令(几乎所有这些命令都在这里)都是为脚本编写者使用而构建的命令,它们就是为此而设的。