GitPython实现脚本自提交至新仓库报错:找不到main.py
问题:GitPython提交文件时提示“main.py不存在”
我是GitPython新手,尝试编写Python程序将自身(main.py)提交到名为my-new-repo的新Git仓库。
我的main.py代码如下:
import git repo = git.Repo.init('my-new-repo') # 列出所有分支 for branch in repo.branches: print(branch) # 指定要暂存的文件列表 repo.index.add(['main.py']) # 提交信息 repo.index.commit('Initial commit')
文件目录结构:
├── main.py ├── my-new-repo (目录) ├── .git
运行程序时返回报错:
No such file or directory: 'main.py' Traceback (most recent call last): File "/home/aaron/Downloads/GitPython/main.py", line 17, in <module> repo.index.add(['main.py']) File "/home/aaron/Downloads/GitPython/git/index/base.py", line 815, in add entries_added.extend(self._entries_for_paths(paths, path_rewriter, fprogress, entries)) File "/home/aaron/Downloads/GitPython/git/util.py", line 144, in wrapper return func(self, *args, **kwargs) File "/home/aaron/Downloads/GitPython/git/index/util.py", line 109, in set_git_working_dir return func(self, *args, **kwargs) File "/home/aaron/Downloads/GitPython/git/index/base.py", line 694, in _entries_for_paths entries_added.append(self._store_path(filepath, fprogress)) File "/home/aaron/Downloads/GitPython/git/index/base.py", line 639, in _store_path st = os.lstat(filepath) # handles non-symlinks as well FileNotFoundError: [Errno 2] No such file or directory: 'main.py' Process finished with exit code 1
解决方案
问题核心是路径相对关系错误:你初始化的Git仓库根目录是my-new-repo,GitPython默认以该目录作为工作区的基准路径。而你的main.py在仓库目录的上级目录,直接传入main.py会让Git在my-new-repo目录下查找该文件,自然找不到。
提供两种可行的解决方式:
方式1:将文件移入仓库目录后提交(推荐)
先把main.py复制到仓库目录内,再执行暂存和提交操作,符合Git仓库管理自身目录内文件的规范:
import git import shutil import os # 初始化仓库 repo_dir = 'my-new-repo' repo = git.Repo.init(repo_dir) # 复制main.py到仓库目录 src_file = 'main.py' dest_file = os.path.join(repo_dir, src_file) shutil.copy(src_file, dest_file) # 列出分支 for branch in repo.branches: print(branch) # 暂存并提交文件 repo.index.add(['main.py']) repo.index.commit('Initial commit')
方式2:使用相对仓库的路径指定文件
如果不想移动文件,可以用相对于仓库目录的路径(../main.py)来指定文件,但这种方式不推荐,因为会将仓库外的文件纳入管理,后续可能引发路径相关问题:
import git repo = git.Repo.init('my-new-repo') # 列出分支 for branch in repo.branches: print(branch) # 用上级目录相对路径指定要暂存的文件 repo.index.add(['../main.py']) repo.index.commit('Initial commit')
内容的提问来源于stack exchange,提问作者Hitesh Arora
相关产品推荐
相关产品推荐

