git控制的文件可以知道它属于哪个分支?

时间:2014-04-08 19:38:25

标签: git

也许这可能是一种奇怪的需求,但我相信这样的事情会有所帮助:

if($branch$ === "master) {
   // Special code for the master branch
} else {
   // Something special for tests. Like extended logging
}

在SVN中这没问题,而且我知道GIT没有关键字扩展系统,无论如何,找到解决方案仍然很有意思。

3 个答案:

答案 0 :(得分:3)

不,所有元文件信息都存储在根目录下的.git下。您可以使用以下bash命令检测当前分支(已修改代码,但最初找到here):

function parse_git_branch() {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/\1/"
}

答案 1 :(得分:1)

Git没有关键字扩展,但Git有filters

您可以设置smudge过滤器,每次将文件签出到工作副本时都会运行该过滤器。在此过滤器中,您可以检查当前分支并在您的来源中执行一些神奇的操作(从(过期的)http://git-scm.com/book/ch7-2.html获取的原始图片,现在为http://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion

enter image description here

您还可以设置一个clean过滤器,每次播放文件时都会运行该过滤器:

enter image description here

当然,您可以将过滤器设置为不是您正在使用的所有文件,而是仅设置为项目的其他文件所包含的单个文件。

这将是Git的方式来做你想要的。

答案 2 :(得分:0)

如果您需要钩子中的信息,通常的方法是不依赖于porcelain command, but on plumbing ones

#!/bin/sh
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)