使用bash,如何替换git克隆url的域和端口?
考虑一下环境使用bash,如何替换git克隆url的域和端口?,bash,git,github,gitlab,Bash,Git,Github,Gitlab,考虑一下环境GITLAB\u CLONE\u URL 我的程序将使用以下内容克隆它: $ myapp clone ${GITLAB_CLONE_URL} 作为提醒,以下是valids git克隆URL: git@github.com:lab/rollup-umd-documentation.git ssh://git@git.gitlab.com:200/deploytools/ssl-gandi.git 我的程序是克隆的,但在某些情况下,它不知道域。它必须包含一个选项,以防无法访
GITLAB\u CLONE\u URL
我的程序将使用以下内容克隆它:
$ myapp clone ${GITLAB_CLONE_URL}
作为提醒,以下是valids git克隆URL:
- git@github.com:lab/rollup-umd-documentation.git
- ssh://git@git.gitlab.com:200/deploytools/ssl-gandi.git
$ myapp clone ${gitUrl} --force-domain=private
这将克隆以下URL:
- git@private:lab/rollup-umd-documentation.git
- ssh://git@私有:200/deploy tools/ssl-gandi.git
--force port=32000
,这将使用一个强制端口:
- git@private:32000/lab/rollup-umd-documentation.git
- ssh://git@私有:32000/deploy tools/ssl-gandi.git
- GNUBashV4+
- GNU sed
git@private:32000/lab/rollup umd文档。git
有效。端口号32000
与路径混淆。因此,我会像git@github.com:foo/bar.git
withssh://git@github.com/foo/bar.git
脚本mygit
:
#!/usr/bin/env bash
set -eu -o pipefail
for param in "$@"; do
case "$param" in
--force-domain=*)
private_domain="${param#*=}"
;;
--force-port=*)
private_port="${param#*=}"
;;
*://*|*@*/*)
git_url="$param"
;;
esac
done
declare -a sed_opts=(-e "s,^\\([a-z]\\+\\)@\\([^:]\\+\\):,ssh://\\1@\\2/,")
[[ -n "${private_domain:-}" ]] && sed_opts+=(
-e "s,//\\(.\\+@\\)\\?[^/:]\\+,//\\1$private_domain,"
)
[[ -n "${private_port:-}" ]] && sed_opts+=(
-e "s,//\\(.\\+@\\)\\?\\([^:/]\\+\\)\\(:[0-9]\\+\\)\\?,//\\1\\2:${private_port},"
)
if [[ -z "${git_url}" ]]; then
cat <<HELP_MESSAGE
$0 [--force-domain=domain] [--force-port=port] git-repo-url
HELP_MESSAGE
exit 1
fi
new_git_url="$(echo "$git_url" | sed "${sed_opts[@]}")"
echo "${new_git_url}"
示例:
./mygit git@github.com:lab/rollup-umd-documentation.git --force-domain=private --force-port=32000
依赖项:
- GNUBashV4+
- GNU sed
git@private:32000/lab/rollup umd文档。git
有效。端口号32000
与路径混淆。因此,我会像git@github.com:foo/bar.git
withssh://git@github.com/foo/bar.git
脚本mygit
:
#!/usr/bin/env bash
set -eu -o pipefail
for param in "$@"; do
case "$param" in
--force-domain=*)
private_domain="${param#*=}"
;;
--force-port=*)
private_port="${param#*=}"
;;
*://*|*@*/*)
git_url="$param"
;;
esac
done
declare -a sed_opts=(-e "s,^\\([a-z]\\+\\)@\\([^:]\\+\\):,ssh://\\1@\\2/,")
[[ -n "${private_domain:-}" ]] && sed_opts+=(
-e "s,//\\(.\\+@\\)\\?[^/:]\\+,//\\1$private_domain,"
)
[[ -n "${private_port:-}" ]] && sed_opts+=(
-e "s,//\\(.\\+@\\)\\?\\([^:/]\\+\\)\\(:[0-9]\\+\\)\\?,//\\1\\2:${private_port},"
)
if [[ -z "${git_url}" ]]; then
cat <<HELP_MESSAGE
$0 [--force-domain=domain] [--force-port=port] git-repo-url
HELP_MESSAGE
exit 1
fi
new_git_url="$(echo "$git_url" | sed "${sed_opts[@]}")"
echo "${new_git_url}"
示例:
./mygit git@github.com:lab/rollup-umd-documentation.git --force-domain=private --force-port=32000
修好了。粘贴代码时可能是我的胖手指。你应该小心使用它们。再次感谢。是的,我使用shellcheck,否则我无法测试此脚本。修复了它。粘贴代码时可能是我的胖手指。你应该小心使用它们。再次感谢。是的,我使用shellcheck,否则我无法测试此脚本。
./mygit git@github.com:lab/rollup-umd-documentation.git --force-domain=private
ssh://git@private/lab/rollup-umd-documentation.git
./mygit --force-domain=private --force-port=32000 \
https://github.com:31000/deploy-tools/ssl-gandi-gitlab.git
https://private:32000/deploy-tools/ssl-gandi-gitlab.git