python - 无法使用 gitpython 创建/添加新分支到 git repo

标签 python windows git python-3.4 gitpython

我一直在研究一些 Python 脚本,这些脚本利用 gitpython 库根据我们的 redmine 实例中的问题自动创建本地分支。开始时,我正在尝试创建一些本地存储库来模拟系统,因为我希望它能正常工作,但我遇到了第一个障碍。

这是我的测试用例的设置,它应该创建一个“远程”存储库,然后克隆它以创建一个本地存储库,最后创建一个本地功能分支:

def setUp(self):
    # Create a remote git repo to simulate the one gitlab maintains
    baseDir = os.path.join('C:\\', 'test-repos')
    if os.path.exists(baseDir):
        shutil.rmtree(baseDir)

    gitlabRepoLocation = os.path.join(baseDir, 'gitlab')
    gitlabRepo = git.Repo.init(gitlabRepoLocation)

    # Clone to a local repo
    localRepoLocation = os.path.join(baseDir, 'local')
    localRepo = git.Repo.clone_from("file://"+gitlabRepoLocation, localRepoLocation)
    localRepo.create_head('some-feature') # <-- This fails

但是当我运行它时我得到:

Traceback (most recent call last):
  File "C:\Projects\PyTools\Gitted\test_Helpers.py", line 70, in setUp
    gitlabRepo.create_head('some-feature')
  File "C:\Python34\lib\site-packages\git\repo\base.py", line 330, in create_head
    return Head.create(self, path, commit, force, logmsg)
  File "C:\Python34\lib\site-packages\git\refs\symbolic.py", line 527, in create
    return cls._create(repo, path, cls._resolve_ref_on_create, reference, force, logmsg)
  File "C:\Python34\lib\site-packages\git\refs\symbolic.py", line 479, in _create
    target = repo.rev_parse(str(reference))
  File "C:\Python34\lib\site-packages\git\repo\fun.py", line 311, in rev_parse
    obj = name_to_object(repo, rev)
  File "C:\Python34\lib\site-packages\git\repo\fun.py", line 124, in name_to_object
    raise BadName(name)
gitdb.exc.BadName: Ref 'HEAD' did not resolve to an object

最佳答案

事实证明@torek 是正确的。添加并提交一个空文件解决了这个问题:

    filename = 'readme.txt'
    open(filename, 'wb').close()
    gitlabRepo.index.add([filename])
    gitlabRepo.index.commit("Adding "+filename+ "to repo")

关于python - 无法使用 gitpython 创建/添加新分支到 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36545150/

相关文章:

python - JSON 中值的第一个字符正在打印?

windows - 为什么批处理文件中名称中带有数字的 env 变量的解释不正确?

git - 如何与团队共享 .env

ruby-on-rails - 如何为所需的 Ruby 版本设置正确的 shebang

python - 顶部的 wxpython 框架

python - 找出两个 csv 文件之间的差异并标记 em

python - 如何通过 python 脚本使用多处理或任何其他模块序列化 msiexec.exe 安装?

Php rename() 无法在 unix 上重命名目录

git - 如何清理远程 GIT 存储库?

python - 从Python执行shell命令并合并环境更改(没有子进程)?