如何获取孤立Commit?GitPython读取指定提交文件失败求助
问题
克隆仓库后本地无法看到一个孤立Commit,该提交未随仓库同步,如何通过GitPython获取该提交中特定文件的内容?
尝试代码:
repo.git.show('{}:{}'.format('12cf56252dcb1535e0fbeb9c3e3586551af671ea', '%s/%s' % ('versions/library-2.6' ,'Dockerfile')))
报错:
"Cmd('git') failed due to: exit code(128) cmdline: git show 12cf56252dcb1535e0fbeb9c3e3586551af671ea:versions/library-2.6/Dockerfile stderr: 'fatal: Path 'versions/library-2.6/Dockerfile' does not exist in '12cf56252dcb1535e0fbeb9c3e3586551af671ea''"
该提交中的目标路径实际存在,但该提交不属于仓库任何分支,属于仓库外的分支。
解决方案
1. 先拉取孤立提交到本地
因为这个提交不在本地仓库的引用列表里,首先需要从远程拉取它:
git fetch origin 12cf56252dcb1535e0fbeb9c3e3586551af671ea
如果提交存储在其他远程仓库,替换origin为对应的远程名称即可。
用GitPython执行拉取:
repo.git.fetch('origin', '12cf56252dcb1535e0fbeb9c3e3586551af671ea')
2. 获取文件内容
拉取完成后,原代码即可正常运行,或者简化写法:
file_content = repo.git.show('12cf56252dcb1535e0fbeb9c3e3586551af671ea:versions/library-2.6/Dockerfile')
3. 直接从远程获取(无需本地拉取提交)
如果不想把提交拉到本地,可以直接指定远程提交路径获取文件:
file_content = repo.git.show('origin/12cf56252dcb1535e0fbeb9c3e3586551af671ea:versions/library-2.6/Dockerfile')
内容的提问来源于stack exchange,提问作者smgtkn
相关产品推荐
相关产品推荐

