我在 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.in
into的副本.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