代码之家  ›  专栏  ›  技术社区  ›  Léo Léopold Hertz 준영

要加前缀吗?<revision number>to codes by git/svn

  •  11
  • Léo Léopold Hertz 준영  · 技术社区  · 15 年前

    你怎么能加前缀 ?v=VersionNumber 使用git/svn高效地访问存储库中的每个文件?

    我发现So使用该实践为其repo中的每个特定文件提供版本号。

    他们使用向量网。我想知道你怎么能用Git做同样的事情。

    举几个例子。

    α1

    <link rel="stylesheet" href="/content/all.css?v=3959">
    

    α2

    <script src="./js/question.js?v=3955" type="text/javascript"></script>
    
    4 回复  |  直到 6 年前
        1
  •  2
  •   Community pid    7 年前

    也许你在找这个:

    How do I enable ident string for Git repos?

    至少可以设置$ID$并且使用过滤器将允许您使用更多选项。

    示例(不是最好的示例) this answer

    echo '*.txt ident' >> .gitattributes
    echo '$Id$' > test.txt
    git commit -a -m "test"
    
    rm test.txt
    git checkout -- test.txt
    cat test.txt
    

    参见手册 git-attributes .

        2
  •  15
  •   Community pid    7 年前

    “在你的仓库里”?在你的存储库 直接地 ?
    那就是电话。” 关键字扩展 “不建议这样做(如本节所述) SO question )

    将元数据(修订号)放入存储在存储库中的数据可以 lead to merge issues .

    您在SO页面中看到的是部署过程的结果,该过程从SVN(修订版)获取元数据并将其放入生成的HTML页面。

    GitFaq 也不推荐。
    相当于集成到部署在服务器上的文件中的SVN版本号将使用 git describe ,以便在部署步骤中显示某种“提交计数”。

    但是直接记录在存储库中意味着关键字扩展, 关键字 联合国 膨胀。


    为了说明这一点,让我们看看Linus在最初讨论这个主题时(2007年4月)所说的话:

    增加扩张不仅仅是“困难”。基本上不可能有任何表演。
    思考 git checkout newbranch “。
    想想我们对文件(以及整个子目录)做了什么!这还没有改变。最后,思考优化在支持分支的类似于SCM的Git中有多重要。

    [关键词扩展所具有的基本问题(即交换分支在没有检出的情况下基本上是不可能做到的) 每个文件 设置了“关键字”属性。还有其他的)。

    现在,未解释的事情是微不足道的(真的 与“crlf->lf”翻译相同:从技术上讲,这也是一个“unexpansion”。它应该是有效的。

    这种不解释的方式也打破了“git diff”,因为它基本上总是使diff 忽视 关键词。换句话说,当你这样做的时候

    git diff A..B
    

    把差异发送给其他人,他们将永远看不到任何关键字!

    现在,这显然满足了我的要求,如果a和b相同,那么diff是空的,所以你应该期望我快乐。
    但我不高兴,因为如果对方也在使用Git,他甚至不能申请 迪夫!
    即使他在“A”,因此得到了一个应该适用的差异 确切地 如果在未添加的关键字周围有其他更改,他将被拒绝 当然,会在他的工作树上扩展!)

    看到了吗?关键词简单 不能 工作。它们坏了。您可以忽略它们(而不是在diff中显示它们),在这种情况下diff被破坏,或者您不能忽略它们(并在diff中显示它们),在这种情况下diff是 破碎,只是不同。

    唯一理智和可行的情况是根本没有它们。任何关键字扩展都将 总是 导致问题。你根本做不好。

        3
  •  6
  •   Community pid    7 年前

    如果此版本号是 生成 由一些 服务器脚本 :php、perl、asp.net、ruby on rails( VonC explained why keyword expansion is a bad idea 也就是说,为什么让git而不是web服务器更新这样的信息是个坏主意),那么只需运行 git describe 在这个脚本中。

    另一个解决办法是 部署(构建)系统 将文件从版本控制系统复制到Web服务器,嵌入此数据。例如,GitWeb,用Perl编写的Git Web界面,具有

    our $version = "++GIT_VERSION++";
    

    替换为生成系统( make gitweb/gitweb.cgi )通过运行结果 GIT-VERSION-GEN . 这意味着,例如,运行gitweb会显示在“generator”meta header中,例如:

    <meta name="generator" content="gitweb/1.6.4.rc0.22.gfc1cf.dirty git/1.6.3.2.317.g2dd3f"/>
    
        4
  •  1
  •   William Pursell    15 年前

    忽略问题中的“高效”一词,您应该查找“过滤器驱动程序”。插入修订版的简单污点和删除修订版的干净污点应该能满足您的需要。