在实际开发 go 的场景中,我们需要拉取自己托管在代码平台的公共包(一般是开发场景中抽出来可以复用的包),但是有时候会有从不同的私有仓库拉取包的需求(自己写的开源项目和所在公司的包都在同一个平台),这时候 go get拉取会默认将.netrc 文件里面的内容作为凭证去拉取,且同.netrc 下面不能出现同一个machine,因此曲线救国的办法就是创建一个脚本去切换.netrc 的内容。具体实现的方法如下:
1. 在~目录下新建.netrc_configs文件夹,用来存多个需要切换的配置。
mkdir ~/.netrc_configs
2. 在文件夹内存放多个需要切换的配置。例如有 a,b 两个配置,我们只需要在文件夹内新建a,b 两个文件,示例内容如下:
a 文件内容
# a
machine xxx.github.com
login xxxx_a_user
password xxxxx_a_pwd
b 文件内容
# b
machine xxx.github.com
login xxxx_b_user
password xxxxx_b_pwd
3.在~目录下新建一个脚本用来切换配置文件 swrc.sh:
#!/bin/bash
# 定义多套配置
NETRC_PATH="$HOME/.netrc"
BACKUP_PATH="$HOME/.netrc.bak"
CONFIG_DIR="$HOME/.netrc_configs"
# 检查参数
if [ $# -eq 0 ]; then
echo "Usage: $0 <config_name>"
echo "Available configs:"
ls $CONFIG_DIR
exit 1
fi
CONFIG_NAME=$1
TARGET_CONFIG="$CONFIG_DIR/$CONFIG_NAME"
# 检查目标配置是否存在
if [ ! -f "$TARGET_CONFIG" ]; then
echo "Error: Config $CONFIG_NAME not found in $CONFIG_DIR"
exit 1
fi
# 备份当前 .netrc 文件
if [ -f "$NETRC_PATH" ]; then
mv $NETRC_PATH $BACKUP_PATH
fi
# 替换为目标配置
cp $TARGET_CONFIG $NETRC_PATH
chmod 600 $NETRC_PATH
echo "Switched to $CONFIG_NAME configuration."
4.这时候只需要执行sh ./swrc.sh a,即可切换配置文件,如果想要更加快捷,可以把命令加入到zshrc 或者 bashrc,但是在这之前需要赋予 swrc.sh 可执行权限,之后就可以配置别名了。
alias swrc="~/swrc.sh"