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

标签 git version-control

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

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

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

我希望 ChangeLog 自动成为最近修改的版本不管我 check out 的是哪个分支。我不想将 ChangeLog 从其他分支手动 merge (或者很可能是忘记 merge )到我当前的分支中。

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

最佳答案

您可以使用 checkout 后 Hook :

#!/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

这个钩子(Hook)根据分支头各自的提交日期对分支进行排序,这可能会有问题。假设您创建了一个主题分支,该分支 Root 于 master 历史记录中的一次提交。尽管它的 ChangeLog 快照在日历时间意义上较旧,但上面的钩子(Hook)会将其视为最新的,因为它被最近创建的提交引用,所以 要小心当您对 ChangeLog 进行未暂存更改时,您不会因切换分支而意外丢失工作

关于GIT - 如何在所有分支中保持文件通用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1876142/

相关文章:

git - 如何在 mplab.x 上集成 git

git - 致命的 : NullReferenceException encountered when interacting with remote

Git flow 发布分支和标签——带或不带 "v"前缀

eclipse - 自动 Mylyn 提交消息中的环境变量(或类似变量)——可能吗?

visual-studio - 多人团队使用 NuGet 和源代码控制

java - 如何像Heroku一样将java应用程序部署到EC2?

git - 在版本控制下处理系统特定信息的最佳实践是什么?

java - 在 eclipse 中有没有一种简单的方法来判断哪个 scm 修订版对光标所在的行进行了更改?

svn - 将代码与两个Subversion存储库同步

svn - 从 VSS 迁移到 SVN