【问题标题】:GIT: Checkout to a "Really" Specific FolderGIT:结帐到“真正”的特定文件夹
【发布时间】:2010-12-22 08:25:18
【问题描述】:

我想从索引、HEAD 或任何其他提交中导出、签出或任何您称之为的内容到特定文件夹,这怎么可能?类似的问题已经被问过:

GIT: Checkout to a specific folder

Do a "git export" (like "svn export")?

但建议的解决方案的问题是它们保留了相对路径。因此,例如,如果我使用上述方法将文件 nbapp/editblog.php 签出到文件夹 temp,则该文件将在 temp/nbapp/editblog.php 中签出!

到底有没有直接结帐到'temp'?

另外,另一个重要的事情是能够检查 HEAD 或任何其他提交。 checkout-index(允许使用 --prefix 选项检出特定文件夹,而普通检出不允许)仅检出索引。如果我想从某个提交中检出某个文件到某个文件夹怎么办? 已经有类似的问题了

【问题讨论】:

    标签: git git-checkout


    【解决方案1】:

    git cat-file blob revision:path > path/where/to/save/file

    【讨论】:

    • 值得注意的是,cat-file 不会执行,autocrlf 或其他工作树特定的修改。
    【解决方案2】:

    使用git archive,您可以在树形规范中包含您不想复制的路径元素。例如

    git archive --prefix=temp/ HEAD:nbapp editblog.php | tar x
    

    创建temp/editblog.php,而

    git archive --prefix=temp/ HEAD nbapp/editblog.php | tar x
    

    创建temp/nbapp/editblog.php

    【讨论】:

      【解决方案3】:

      使用--work-tree

      这迫使你也使用--git-dir 指向你的.git 目录。 --git-dir=.git 假设您在 git 文件夹中。您当然可以通过调整此文件夹从其他任何地方调用此命令。

      然后指定<tree> 而不是提交。这会删除主要路径。

      git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=HEAD:path/in/your/repo  .
      

      使用:path/in/your/repo 应该使用索引。

      如果您只需要一个文件,请为文件命名,而不是使用“.”。最后。

      如果您希望在 dest 文件夹中创建部分文件夹结构(用于子路径)

      git  --git-dir=.git  --work-tree=/folder/into/which/to/export/  restore  --source=HEAD:path/in/  your/repo
      

      仍然只导出path/in/your/repo。 但是会创建目录/folder/into/which/to/export/your/repo

      【讨论】:

        猜你喜欢
        • 2011-05-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-08-14
        • 2017-08-02
        • 2023-01-20
        • 2014-08-22
        相关资源
        最近更新 更多