Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
保持两个Git分支的特定文件同步_Git_Github_Git Branch - Fatal编程技术网

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

保持两个Git分支的特定文件同步,git,github,git-branch,Git,Github,Git Branch,我在主分支中有一个由四个文件组成的存储库:两个项目文件(PHP文件btw)加上一个README.md和.gitignore。我想创建一个额外的分支,它只包含同一提交级别的两个PHP文件。保持这两个分支同步的最佳实践是什么?如果可能的话,我只想提交一次以更新我的PHP文件 我之所以要研究这个问题,是因为我想创建一个名为dist的分支,它只附带基本文件。创建您的dist分支,记录您不想要的文件的删除 git checkout master git checkout -b dist git rm .g

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


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

创建您的
dist
分支,记录您不想要的文件的删除

git checkout master
git checkout -b dist
git rm .gitignore
git rm README.md
git commit -m "Remove non-dist files"
然后,每次您想要更新您的
dist
分支时,只需它:

git checkout dist
git rebase master
master
上重放您的
dist
提交(您在创建该分支时进行了提交,并且您在其中执行了
git rm
一些文件),这意味着它将始终删除额外的文件

你必须这样做,但这不是问题,因为没有人应该对该分支作出贡献



也就是说,发布管理通常不是通过分支来维护的,而是使用一个能够从源代码打包和发布的脚本(这里指的是
主代码
分支中的一个脚本,您执行该脚本以将所需内容复制到要部署的位置)。

正如@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
)

不熟悉的命令(这里几乎所有命令)都是为脚本编写人员使用而构建的,它们就是为了这个目的而构建的。

对于2个文件,值得吗?自述文件通常有助于keep@exussum总的来说,我同意,但在这种情况下,分发这些文件实际上可能是致命的。谢谢@VonC,我将尝试一下。我以前还没有使用过rebase(我想!),但是每次提交时我不是都要重复所有这些步骤吗?我还偶然发现了一种可能需要较少互动的方法。来介绍一下我为什么要尝试实现这一点。我已经为我的Sublime文本插件创建了一个。这个linter基本上由npm包、grunt任务和
.travis.yml
组成。虽然主分支附带了
README.md
.gitignore
,但我不希望这些文件出现在dist分支中,因为这是专门用于Fetch的。没有必要干扰用户自己的
README.md
.gitignore
文件。我理解你在中所说的,但拜托:我提议的重新基础?当然,这并没有超出OP的舒适区;)不管怎样,+1。@VonC你说得对,当然,我有点懒。我正在尝试使用脚本,但它在代码的最后一行打嗝。我认为这与左大括号与右括号不匹配有关。还有,'+-p'中的'+'正确吗?@Wookiem-Yow。感谢您指出不匹配的大括号,已修复。
:+
是shell扩展语法,用于“如果变量不为空,则替换后面的内容”,如果当前
中有任何内容,shell将在
-p$branch
中进行细分。