我想运行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。详细信息请阅读精细手册。