代码之家  ›  专栏  ›  技术社区  ›  themis

GIT-如何在所有分支中保持文件的公共性

  •  7
  • themis  · 技术社区  · 16 年前

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

    git checkout -b revA ,执行编辑,更新更改日志 git commit .

    我那么 git checkout -b master . 此签出将用分支“master”中的版本替换ChangeLog。

    无关的

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

    4 回复  |  直到 16 年前
        1
  •  8
  •   shytikov Cascabel    14 年前

    您可以使用签出后挂钩:

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

    这个钩子根据分支头部各自的提交日期对分支进行排序,这可能会有问题。假设您创建了一个主题分支,该分支扎根于大师历史中的提交。即使它的快照 在日历时间的意义上是旧的,上面的钩子将把它视为最新的,因为它被最近创建的提交引用,所以 小心别意外丢了工作 通过在对进行未分级更改时切换分支 变更日志

        2
  •  7
  •   CB Bailey    16 年前

    我知道这个答案很难回答,但我认为其他任何事情都会让你感到维护方面的头疼。

    git log 符合要求。特定分支中的所有更改都由进入该分支的提交准确描述,不可能过期,也不可能将不在该分支中的更改描述归于该分支。

    自从我搬到git后,我就放弃了手工维护变更日志。对我来说,它没有任何价值和重大成本。

    没有理由不在提交中放置完整的描述。具有 --amend 您可以修复拼写错误并添加详细信息,如果您坚持简短的主题行和更完整的描述的惯例,那么您可以在短日志格式和长日志格式之间进行选择。

        3
  •  5
  •   Steven Schlansker    16 年前

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

        4
  •  2
  •   Mark Carey    16 年前

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