我的dotfiles here有一个GitHub存储库。
它包含一个installdotfiles.sh脚本,用于从GitHub安装dotfiles。我想在GitLab上有另一个git存储库用于备份(以及非常酷的自定义语法突出显示:P),镜像此存储库,除了在存储库上运行shell命令:
grep -rl raw.githubusercontent . |
xargs sed -i ''
's/raw.githubusercontent/gitlab/g'; grep -rl 'dotfiles/master' . |
xargs sed -i '' 's/dotfiles\/master/dotfiles\/raw\/master/g'
将Github的链接替换为GitLab的相应链接。
基本上,如果我推送到我的GitHub dotfiles存储库,我会自动更新GitLab存储库,除了先在存储库上运行脚本,所以我的GitLab存储库包含GitLab链接。
我如何实现这样的钩子?
我听说这可以使用Git Hooks来实现,但是我不熟悉它们,并且阅读它们,我并不完全理解这样做是怎么做的。
PS如果两种方式都有效会很好 - 所以当我推送到GitLab时,GitHub将运行一个不同的脚本,用GitHub链接替换GitLab链接,这样每当我推送到一个时,都会相应地更新。
答案 0 :(得分:1)
最简单的方法是让您的脚本installdotfiles.sh
使用您设置的变量(在调用脚本之前),具体取决于您要获取文件的存储库。
例如:
origin=github curl https://raw.githubusercontent.com/thepiercingarrow2/dotfiles/master/installdotfiles.sh | sh
# or
origin=gitlab curl https://gitlab.com/thepiercingarrow2/dotfiles/raw/master/.bash_profile | sh
这意味着您的脚本包含一个简单的测试:
remote="raw.githubusercontent.com/thepiercingarrow2/dotfiles"
if [[ "${origin}" == "gitlab" ]]; then
remote="gitlab.com/thepiercingarrow2/dotfiles/raw"
fi
#bash_profile
curl -# https://${remote}/master/.bash_profile > ~/.bash_profile
换句话说,你真的不需要git钩子。任何一种。
答案 1 :(得分:0)
我如何实现这样的钩子?
您可以选择任何您喜欢的挂钩,并查看文件中的链接。
例如,你可以使用这样的东西,并在if条件之后添加你的脚本。
pre-receive hook
#!/bin/sh
# Check to see if this is the first commit in the repository or not
if git rev-parse --verify HEAD >/dev/null 2>&1
then
# We compare our changes against the previous commit
against=HEAD^
else
# Initial commit: diff against an empty tree object
against=4b825dc642cb6eb9a060e54bf8d69288fbee4904
fi
# Redirect output to screen.
exec 1>&2
# Get the list of files which were commits
# assuming the other files are already contains the right values and does not need to be updated
files = $(git diff-tree -r --name-only $against )
# ... do whatever you want to do with the files
PS如果两种方式都有效会很好 - 所以当我推送到GitLab时,GitHub将运行一个不同的脚本,用GitHub链接替换GitLab链接,这样每当我推送到一个时,都会相应地更新。
在每个存储库上设置2个挂钩,i,每个存储库上都有正确的链接。
如果您可以在客户端使用本地代码,则可以在git中使用此功能:
事实证明,您可以编写自己的过滤器,以便在提交/结帐时在文件中进行替换。 这些被称为
clean
和smudge
过滤器。
在这里阅读所有相关内容:
https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes#Keyword-Expansion