You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:55:23