执行期间更新

执行期间更新

我在 git 存储库中有一个 bash 脚本。我用git pull里面的脚本来更新。但有时,当我对脚本本身进行更改时,整个脚本会崩溃,因为它在执行过程中发生了更改。我想要一些东西来更新这个文件,但不是在执行期间。

我怎么能这样做?

答案1

通用方式

解决此类问题的常见方法之一是拥有两个版本的脚本 - 一个用于运行,另一个用于存储在存储库中。它适用于任何版本控制系统,即使脚本是从网络下载的。

例如,您可以拥有update.sh.in(将其添加到存储库):

#!/bin/bash
git pull
if [ update.sh.in -nt update.sh ]; then cp update.sh.in update.sh; fi

# actual work of the script
# any line here can be changed in the next version of the script

手动将该文件复制到update.sh,并将其包含到.gitignore.跑过update.sh

这里的技巧是前三行不应修改。只要.sh.ininto的副本.sh保持在脚本的相同位置 - 它就可以毫无问题地运行。

.in扩展是各种工具的传统扩展,可从模板文件生成实际脚本或源代码。

git钩子

另一种也常见但可能不太常见的方法是使用 git hooks。这是 GIT 特有的方法。您可以编写其他脚本并将它们放入.git/hooks目录中。 Git 将在不同的执行点调用这些脚本。

您没有具体说明除了 之外您还需要做什么git pull。但也许,您可以将您的特殊工作放入.git/hooks/pre-rebase或中.git/hook/post-merge。会自动调用git pull.

有关钩子的完整列表,请阅读此处:https://git-scm.com/docs/githooks

相关内容