能否使用Git从远程存储库克隆单个文件?例如,我想将别人的.htaccess文件复制到我的项目中。我不需要他们整个存储库,只需要这一个文件。
能否使用Git从远程存储库克隆单个文件?例如,我想将别人的.htaccess文件复制到我的项目中。我不需要他们整个存储库,只需要这一个文件。
与其克隆,也许你可以直接下载文件。
假设代码库是公开的,你可以像这样下载单个文件:
wget https://raw.githubusercontent.com/jquery/jquery/master/src/ajax.js
要获取URL,请导航到GitHub上的文件,并选择“Raw”视图。
请注意,这仅适用于公共存储库。
efficientnet_weight_update_util.py
。
tensorflow/tensorflow/python/keras/applications/efficientnet_weight_update_util.py
如果您使用wget
工具从链接获取文件,则会获得带有HTML格式的py文件,因此请改用来自https://raw.githubusercontent.com
的原始版本。
并复制URL以便与wget
一起使用
例如
!wget https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/python/keras/applications/efficientnet_weight_update_util.py
现在您只从仓库中获得了 efficientnet_weight_update_util.py 文件。
我需要这个功能,所以我创建了这个工具。 将内容复制到文件中(例如gitget.sh)
#!/bin/bash
CURRENT_DIR=`pwd`
REPOSITORY=$1
REPOSITORY_BRANCH=$2
REMOTE_PATH=$3
LOCAL_PATH=$4
TMP_DIR=$(mktemp -d -t ci-XXXXXXXXXX)
cd $TMP_DIR
git clone -b $REPOSITORY_BRANCH -n $REPOSITORY --depth 1 .
git checkout HEAD $REMOTE_PATH
if [[ -z $LOCAL_PATH ]]; then
mv $REMOTE_PATH $CURRENT_DIR
else
if [[ "$LOCAL_PATH" = /* ]]; then
mv $REMOTE_PATH $LOCAL_PATH
else
mv $REMOTE_PATH $CURRENT_DIR/$LOCAL_PATH
fi
fi
cd $CURRENT_DIR && rm -rf $TMP_DIR
使用方法
将远程文件下载到当前目录:
bash gitget.sh git@host:username/repo.git main some/file/path
下载远程文件到指定文件(相对或绝对路径)
bash gitget.sh git@host:username/repo.git main some/file/path some/dir/file.ext
下载远程文件到指定目录(相对或绝对路径)
bash gitget.sh git@host:username/repo.git main some/file/path some/dir/
注意:也适用于https网址。
此工具依赖于clone的depth=1功能-整个存储库不会被获取到本地。
为了方便起见,我们也可以从gitlab的存储库中获取此脚本: https://gitlab.com/vladimir.djuricic/tools/-/raw/main/bash/gitget.sh?inline=false