从 Github Repo 克隆单个文件

Cloning a Single File from Github Repo

是否可以使用 Git 从远程存储库克隆单个文件?例如,我希望将其他人的 .htaccess 文件复制到我自己的项目中。我不需要他们的整个存储库,只需要这个文件。

与其克隆,也许您可​​以直接下载文件。

假设存储库是 public,您可以像这样下载单个文件:

wget https://raw.githubusercontent.com/jquery/jquery/master/src/ajax.js

要获取 url,请导航到 GitHub 中的文件,然后选择“原始”视图。

请注意,这仅适用于 public 个存储库。

例如,您要克隆此 python 文件 efficientnet_weight_update_util.py

tensorflow/tensorflow/python/keras/applications/efficientnet_weight_update_util.py

如果您使用 wget 工具从 link 获取文件,您将获得 HTML 格式的 py 文件,因此请使用 [=13] 的原始版本=]

并复制 URL 以与 wget

一起使用

https://raw.githubusercontent.com/tensorflow/tensorflow/master/tensorflow/python/keras/applications/efficientnet_weight_update_util.py

例如


!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=
REPOSITORY_BRANCH=
REMOTE_PATH=
LOCAL_PATH=
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 网址。

此工具依赖克隆的 depth=1 功能 - 不会将整个存储库提取到本地。

为了方便起见,我们也可以从 gitlab 的存储库中获取此脚本: https://gitlab.com/vladimir.djuricic/tools/-/raw/main/bash/gitget.sh?inline=false