如何在特定的 git commit 上运行 shell 脚本?

Chu*_*Liu 3 python git shell

我想运行run.sh以检查我的代码的结果,大约需要 30 个小时。但我迫不及待地想在我的代码中添加其他功能。但是,我发现有一些潜在的危险:

就我而言,我希望在run.sh运行时修复所有文件,同时继续编辑可能存在错误的 Python 文件的更多功能。

例如,这是我的 git 日志

* commit 6d1931c0f5f6f7030f1a93d4f7496527c3711c1f (HEAD -> master)
| Author: deeperlearner
| Date:   Fri Aug 13 10:37:21 2021 +0800
|
|     Version to be run by shell script
|
Run Code Online (Sandbox Code Playgroud)

当我继续run.sh提交6d1931时,如何强制运行提交?

* commit 059706b752f4702bc5d0c830c87e812a7bbaae27 (HEAD -> master)
| Author: deeperlearner
| Date:   Fri Aug 13 10:38:21 2021 +0800
|
|     Buggy commit that may destroy `run.sh`
|
* commit 6d1931c0f5f6f7030f1a93d4f7496527c3711c1f
| Author: deeperlearner
| Date:   Fri Aug 13 10:37:21 2021 +0800
|
|     Version to be run by shell script
|
Run Code Online (Sandbox Code Playgroud)

我目前有解决方案:使用docker或只是将整个代码复制到其他目录。

但我想知道是否有任何方法可以强制 shell 脚本在特定的提交哈希 ID 上执行?

Wil*_*ell 5

这是一个git worktree非常适合的用例。您基本上可以在所需的提交处创建一个新分支,并在该分支处制作工作目录的副本。例如,如果您位于工作树的顶层并且想要在当前 HEAD 上运行脚本,只需执行以下操作:

$ git worktree add ../bar
Preparing worktree (new branch 'bar')
HEAD is now at b2ceba9 Add d
$ cd ../bar
$ # Run long running script here
$ cd ../foo
$ # Edit files, create new commits, profit
Run Code Online (Sandbox Code Playgroud)

(在本例中,foo是 repo 的顶级目录的名称。) worktree 有一些选项可以处理特定的提交而不是 HEAD。阅读精美手册以了解详细信息。