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



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

  • 在shell运行时编辑shell脚本
  • 在运行时编辑shell脚本和python脚本

在我的情况下,我希望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.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
|

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

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

这是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

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

最新更新