代码之家  ›  专栏  ›  技术社区  ›  Dmitry Shkolnik

将Git索引复制到临时文件夹中

  •  0
  • Dmitry Shkolnik  · 技术社区  · 6 年前

    假设我有一个实用工具 some-check {baseline_folder} {working_folder}

    我想在两个稍有不同的用例中使用此实用程序:

    • 索引与头的提交前验证

    第一个用例非常简单,因为将基线(即HEAD)放入temp文件夹并不是什么大事。

    1. 建立一个储藏室

    2. 马上涂回去

    3. 使用 git-archive

    4. 解压到临时文件夹

    5. 把藏起来的东西放下

    UPD:长话短说:问题是如何得到一个文件夹,它有头+阶段,但没有修改/未跟踪。

    2 回复  |  直到 6 年前
        1
  •  3
  •   torek    6 年前

    为了验证索引中的内容,可以通过以下方式将索引中的所有内容提取到临时工作树中:

    tmpdir=$(mktemp -d)                # or your other chosen method
    trap "rm -rf $tmpdir" 0 1 2 3 15   # do something different in other languages
    
    GIT_WORK_TREE=$tmpdir git checkout-index --all
    

    确保临时目录存在并且是空的(默认值) mktemp -d 在这里这样做),并确保清理完成后(的 trap 在这里做)。

    请注意,属性规则将应用于 git checkout-index git archive ,您可以通过 export-ignore export-subst . 如果要使用该方法,可以使用 git write-tree ,然后使用 git存档 在那棵树上。

    git写入树 git签出索引 方法只是从目标工作树中忽略未合并的文件。

        2
  •  0
  •   Obsidian mattz608    6 年前

    有没有比这更冗长的方法?

    有更好的方法:

    git worktree
    

    有一个 similar question 在这里。这应该符合你的需要。