从Github仓库克隆单个文件

14

能否使用Git从远程存储库克隆单个文件?例如,我想将别人的.htaccess文件复制到我的项目中。我不需要他们整个存储库,只需要这一个文件。


2
可能是如何从git存储库中仅检出一个文件?的重复问题。 - Jonathan.Brink
3个回答

26

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

假设代码库是公开的,你可以像这样下载单个文件:

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

要获取URL,请导航到GitHub上的文件,并选择“Raw”视图。

请注意,这仅适用于公共存储库。


是的,我已经做到了。不过,我仍然在想Git是否允许执行这样的操作。这将非常方便。wget也能复制目录吗? - MadPhysicist
@MadPhysicist 是的,这是可能的。请参见https://dev59.com/WHE95IYBdhLWcg3wE52C 。我建议也许像wget或curl这样的工具可能是一个更容易的选择。 - Jonathan.Brink
应该更新说明,只适用于公共存储库,并且原帖没有指定是公共的还是私有的。 - shellscape

0
例如,您想克隆此Python文件 efficientnet_weight_update_util.py

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

如果您使用wget工具从链接获取文件,则会获得带有HTML格式的py文件,因此请改用来自https://raw.githubusercontent.com的原始版本。

view raw

并复制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 文件。


0

我需要这个功能,所以我创建了这个工具。 将内容复制到文件中(例如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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接