如何正确指定路径从Git仓库的子目录中检出单个文件
解决Git checkout子目录单个文件的问题
我之前也碰到过一模一样的情况,给你拆解下问题和解决办法:
先确认文件真的在目标分支里
首先得排除最基础的问题:你要的folderA/fileA.txt是不是真的在develop分支的HEAD里?执行这条命令看看:
git ls-tree HEAD folderA/
如果输出里能看到fileA.txt的条目,说明文件确实存在;要是没找到,那大概率是路径拼写错了(比如大小写、目录名写错),或者这个文件根本不在你当前拉取的develop分支上。
用正确的路径写法执行checkout
你之前踩的坑主要是路径格式不对:
- 绝对路径(开头加
/)绝对不能用,Git会把它当成系统根目录的路径,自然找不到,所以/folderA/fileA.txt这种写法直接pass。 - 带引号的
"folderA/fileA.txt"本身没问题,但如果报错,要么是路径拼写错了,要么是文件根本不在当前分支。
正确的命令其实很简单,直接用相对仓库根目录的路径就行,不需要额外加引号(除非路径里有空格):
git checkout HEAD folderA/fileA.txt
执行完这条,Git会自动帮你创建folderA目录,然后把fileA.txt拉到里面。
给你一套万无一失的完整流程
要是你想重新操作一遍,按这个步骤来绝对没问题:
# 克隆develop分支,只拉取仓库结构不下载文件 git clone --branch develop --no-checkout https://bitbucket.host/.../my_repository.git # 进入仓库目录 cd my_repository # 拉取最新的分支内容(其实clone时已经拉了,保险起见再执行一次) git fetch origin develop # 再次确认文件存在 git ls-tree HEAD folderA/fileA.txt # 最后checkout文件 git checkout HEAD folderA/fileA.txt
这样就能顺利拿到子目录里的文件啦。
内容的提问来源于stack exchange,提问作者czmafi00
相关产品推荐
相关产品推荐

