如何使用Git/SVN高效地将前缀?v=VersionNumber
添加到代码仓库中的每个文件?
我发现SO在其代码仓库中为每个特定文件赋予版本号。
他们使用SVN。我想知道如何使用Git实现相同的功能。
以下是一些示例。
#1
<link rel="stylesheet" href="/content/all.css?v=3959">
#2
<script src="./js/question.js?v=3955" type="text/javascript"></script>
如何使用Git/SVN高效地将前缀?v=VersionNumber
添加到代码仓库中的每个文件?
我发现SO在其代码仓库中为每个特定文件赋予版本号。
他们使用SVN。我想知道如何使用Git实现相同的功能。
以下是一些示例。
<link rel="stylesheet" href="/content/all.css?v=3959">
<script src="./js/question.js?v=3955" type="text/javascript"></script>
添加扩展不仅“更难”。从任何性能来看,它基本上都是不可能的。
想想 "git checkout newbranch
"。
再想想我们对于没有改变的文件(以及整个子目录!)要进行什么操作。最后,考虑在支持分支的SCM git中这种优化有多重要。[关键字扩展存在的]根本问题(例如,在没有检查设置“关键字”属性的每个单个文件的情况下,切换分支基本上是不可能的。还有其他问题)。
现在,取消扩展很容易实现(实际上与“CRLF->LF”转换完全相同:从技术上讲,这也是一种“取消扩展”)。而且应该可以工作。
这种方法还会破坏“git diff”,因为它基本上总是使diff忽略关键字。换句话说,当你执行时
git diff A..B
并且将差异发送给其他人,他们根本看不到任何关键字!现在,这显然满足了我如果A和B相同则差异为空的要求,因此您应该期望我很高兴。但我并不满意,因为如果另一个人也在使用git,则他甚至无法应用差异!即使他处于“A”状态,并因此获得了应该准确应用的差异,如果未展开关键字周围存在其他更改(当然,他将在工作树中展开它们!),他也将收到拒绝。你明白吗?关键字根本行不通。它们是有问题的。您可以忽略它们(不在差异中显示它们),在这种情况下,差异是错误的;或者您可以不忽略它们(并在差异中显示它们),在这种情况下,差异也是错误的,只是不同而已。唯一明智可行的情况是根本没有它们。任何关键字扩展都将始终导致问题。您根本没法做到正确。our $version = "++GIT_VERSION++";
由构建系统 (make gitweb/gitweb.cgi
) 替换,通过运行 GIT-VERSION-GEN
的结果来实现。这意味着例如运行 gitweb 时会在 "generator" 元数据头中显示:
<meta name="generator" content="gitweb/1.6.4.rc0.22.gfc1cf.dirty git/1.6.3.2.317.g2dd3f"/>
echo '*.txt ident' >> .gitattributes
echo '$Id$' > test.txt
git commit -a -m "test"
rm test.txt
git checkout -- test.txt
cat test.txt
请参阅Git属性手册。