【发布时间】:2023-03-05 00:58:01
【问题描述】:
我想避免从我的脚本中调用瓷器命令,但是有没有办法只使用像checkout-index 这样的管道命令来获得git checkout <commit> 的某些行为?我对对工作副本的影响特别感兴趣:假设一切都很干净,checkout 删除在旧 HEAD 中跟踪而在新 HEAD 中不存在的文件。 checkout-index 似乎没有删除文件的概念。我能想到的最接近的事情就是打电话
git diff-tree -p <old> <new> | git apply
但计算整个差异似乎不必要地昂贵。有没有更好的办法?
【问题讨论】:
-
你有什么理由不直接打电话给
git checkout ...? -
是的,不要让你的生活变得不必要的艰难。
-
最终,我希望能够更好地控制结帐的发生方式。例如,
checkout可以吹走被忽略的文件,我想避免这样做(提高安全性)。但我确实想要覆盖已删除的文件(降低安全性),而不使用--force来覆盖所有内容。这是在后台使用 git 存储文件树的脚本的一部分,checkout非常接近我希望我的脚本的行为方式,但不完全是。我想如果我可以通过管道命令获得checkout,我可以从那里对其进行调整,但请告诉我是否有其他方法可以获得此控制。 -
您是否实际测试过
diff-tree很慢?checkout基本上区分所有内容以首先弄清楚要做什么。 (当然,checkout不会创建补丁然后应用它们,您可能也不应该这样做。) -
@EdwardThomson
diff-tree可能是我想要的,但我不确定将其输出输入什么。除了上面的git applyhack 之外,还有没有办法将此差异应用于工作副本?编写一个 Python 脚本来获取删除列表并实际执行它们很容易,但我担心这会很慢。
标签: git git-checkout git-plumbing