GIT - 如何在所有分支中保持文件通用

时间:2009-12-09 19:13:38

标签: git version-control

假设我在分支“master”中有一个文件“ChangeLog”。我想记录有关此文件中任何分支的所有更改的信息(比提交消息和其他描述性信息更详细)。

git checkout -b revA,执行编辑,更新ChangeLog 和git commit

然后我git checkout -b master。此结帐将使用分支“master”中的版本替换ChangeLog。

我希望ChangeLog能够自动成为最近修改过的版本无论我检查过哪个分支。我不想手动合并(或者,很可能,忘记合并)将ChangeLog从其他分支合并到我当前的分支。

我还没有找到任何似乎允许这样做的东西。有可能这样做吗?

4 个答案:

答案 0 :(得分:8)

您可以使用结账后挂钩:

#!/bin/sh

newref="$2"
isbranch="$3"

# ignore file checkouts
if test $isbranch -eq 0; then
  exit 0
fi

path=ChangeLog

git for-each-ref --sort=-committerdate \
                 --format='%(objectname) %(refname:short)' \
                 refs/heads/\* |
while read sha ref; do
  if git rev-parse --verify --quiet "$sha:$path" >/dev/null
  then
    if test "$newref" != "$sha"; then
      echo Checking out $path from $ref
      git checkout $sha -- "$path"
    fi
    break
  fi
done

如果合适,您仍然可以在分支上添加和提交ChangeLog

这个钩子按其头部的相应提交日期对分支进行排序,这可能会有问题。假设您创建一个以master的历史记录中的提交为根的主题分支。尽管ChangeLog的快照在日历时间方面较旧,但上面的钩子会将其视为最新的,因为它是由最近创建的提交引用的,所以要小心你不要当您对ChangeLog进行非分段更改时,通过切换分支会意外丢失工作

答案 1 :(得分:7)

我知道这个答案是在乞求这个问题,但我认为其他任何因素都会让你自己陷入困境。

如果您在提交消息中添加了足够的描述,则git log符合要求。特定分支中的所有更改都由进入它的提交完全描述,并且它不可能过时或者描述不属于它的更改。

自从我转向git后,我已经放弃了手动维护更改日志。对我来说,它没有任何价值和巨大的成本。

没有理由不在提交中提供完整的描述。使用--amend,您可以修复拼写错误并添加细节,如果您坚持使用简短的主题行和更全面的描述,那么您可以选择短日志格式和长日志格式。

答案 2 :(得分:4)

将其放在一个单独的存储库中,并使用submodule将其链接到每个分支。

答案 3 :(得分:2)

编写一个post-commit钩子,将文件合并到其他分支中。 http://kernel.org/pub/software/scm/git/docs/githooks.html