我有很多脚本,几乎每天都在工作中使用。我在我的个人笔记本电脑上开发和维护这些。我有一个本地git存储库来跟踪更改,我在github上有一个存储库来推送更改。
我在远程超级计算机上做了很多工作,我经常在那里使用我的脚本。我想用我维护的脚本来更新我的远程/home/bin
,但不会让我的存储库扰乱系统。
我目前的解决方案感觉并不理想。我在我的.bashrc
下面添加了以下代码。每当我登录时,我的存储库都会被删除,然后我从github克隆我的项目。然后,我将想要的脚本文件复制到我的bin中,并使其可执行。
这种方法是可行的,但感觉不是一个优雅的解决方案。我只想直接下载脚本文件,而不需要使用git存储库。无论如何,我从不从远程计算机编辑我的脚本文件,所以我只想从github获取文件。
我想也许wget
可以工作,但在github的原始文件页面中包含url并不是很健壮;如果我重命名文件,我想我也必须更新代码。至少我目前的解决方案是健壮的(只要github链接不变(。
我的.bashrc:中的代码
REPDIR=mydir
if [ -d $REPDIR ]; then
rm -rf $REPDIR
echo "Old repository removed."
fi
cd $HOME
git clone https://github.com/user/myproject
cp $REPDIR/*.py $REPDIR/*.sh /home/user/bin/
chmod +x /home/user/bin/*
基于Kent的解决方案,我定义了一个更新脚本的函数。为了避免符号链接出现任何问题,我只是取消所有链接并重新链接。不过,那可能只是我的妄想症。。。。
function updatescripts() {
DIR=/home/user/scripts
CURR_DIR=$PWD
cd $DIR
git pull origin master
cd $CURR_DIR
for file in $DIR/*.py $DIR/*.sh; do
if [ -L $HOME/bin/$(basename $file) ]; then
unlink $HOME/bin/$(basename $file)
fi
ln -s $file $HOME/bin/$(basename $file)
done
}
在远程机器上,不要先执行rm
,然后执行clone
,将存储库放在某个地方,只执行pull
。既然你说你不会更改那台机器上的文件,就不会有冲突。
对于脚本文件。不要执行cp
,而是创建到目标目录的符号链接(ln -s
(。