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

没有工作树的存储库上的Git操作?

git
  •  0
  • Rebse  · 技术社区  · 8 年前

    遗留项目的构建工作流应该签出特定的git版本标记并编译该源代码。 我建议保持简单,并像这样使用Git Cli:

    git clone –b $versiontag –singlebranch $gitrepouri
    

    而不是git克隆和git签出标记。

    创建工作目录,然后对该文件夹进行操作。

    一开始她试着 git checkout $versiontag 在复印件之后。
    输出有多个条目,如:

    $ git checkout tags/sometag
    D       Foobar/somefile
    D       Foobar/someotherfile
    [...]
    Note: checking out 'tags/sometag'.
    
    You are in 'detached HEAD' state.
    [...]
    

    但是工作树的内容不同于普通的git克隆和git签出,尽管这两种内容都应该在 分离的头部状态,并已签出特定的标签。
    同样,像Sonarqube这样的工具也有问题,因为git的指责不起作用

    后来她试着 git sparse-checkout 在复印件之后,这似乎奏效了
    一见钟情-

    对Git存储库使用Git命令而不使用整个树有什么缺点?

    1 回复  |  直到 8 年前
        1
  •  2
  •   torek    8 年前

    Git的内部设置为 它使用的克隆没有工作树。明确地, core.bare true 对于这样的存储库。

    手动复制存储库,而不是使用 git clone 要复制它,请复制它的配置文件( .git/config 和 .git/info/ 文件)。这包括 设置 和 Git自己创建的几个设置,用来描述Git运行的机器和文件系统的行为。如果这些设置不反映实际的机器和实际的文件系统,则可能会以各种方式出错。一些 info 文件可能会将Git指向其他目录 不 复制的;如果是这样的话,你也需要知道该怎么做。所以,除非你知道你对其他变量做了什么 信息 cp -r (或 tar 或类似)复制 .git

    吉特

    也就是说,你 可以 做 裸存储库上的Git操作。具体来说,您可以执行任何不需要工作树的操作。这意味着,如果你知道你在做什么,关于特殊的控制变量,你 复制 吉特 git checkout ,例如,坏索引不是一个问题,尽管如果你要这么聪明,这可能是聪明的一半,你也可以知道什么时候是安全的 去除 断裂的索引。

    您还可以使用为空存储库提供临时工作树 git --work-tree=<path> ... 或 GIT_WORK_TREE=<path> git ... . 如果你这样做,那会覆盖 设置,并且裸存储库的索引用于跟踪给定的 <path> . 请注意,如果更改路径,将使索引无效;在这种情况下,必须使用另一个索引(通过设置 GIT_INDEX_FILE 或删除现有索引。

    可以 吉特 目录,或者使用 cp 或 吉特 包含或排除其当前工作树的目录到具有新工作树的新位置。但总的来说,你 不应该 ,因为如果这样做,就必须对Git的未来版本做很多假设。Git保证 和 git bundle 类似的东西会像现在这样继续工作;Git并没有承诺对一个复制品做鬼鬼祟祟的手术 目录将以同样的方式继续工作。