如何自动从github下载文件而不复制存储库

时间:2018-11-16 12:43:00

标签: bash git github

我有许多几乎每天都在工作中使用的脚本。我在个人笔记本电脑上开发和维护这些软件。我有一个本地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
}

1 个答案:

答案 0 :(得分:3)

在该远程计算机上,先执行rm,然后先执行clone,然后执行pull,然后将存储库保留在某个位置。因为您说过不会更改该计算机上的文件,所以不会发生冲突。

用于脚本文件。不要执行cp,而是创建指向目标目录的符号链接(ln -s)。