使用 gitpython 将 git 存储库克隆到非空目录中

问题描述

我正在尝试使用 gitpython 创建更新程序。但是,当我尝试克隆到现有目录时出现错误

Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.2032.0_x64__qbz5n2kfra8p0\lib\tkinter\__init__.py",line 1895,in __call__
    return self.func(*args)
  File "c:\Users\kiyer\Documents\GitHub\SmartRC App\SysBasic.py",line 66,in group
    sysbasic.update.InstallClientUpdate(root,update)
  File "c:\Users\kiyer\Documents\GitHub\SmartRC App\SysBasic.py",line 100,in InstallClientUpdate
    client(window,update)
  File "Sys\Installer.py",line 35,in client
    Repo.clone_from("https://github.com/NoKodaAddictions/File-Database.git",path2)
  File "C:\Users\kiyer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\git\repo\base.py",line 1032,in clone_from
    return cls._clone(git,url,to_path,GitCmdobjectdb,progress,multi_options,**kwargs)
  File "C:\Users\kiyer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\git\repo\base.py",line 973,in _clone
    finalize_process(proc,stderr=stderr)
  File "C:\Users\kiyer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\git\util.py",line 329,in finalize_process
    proc.wait(**kwargs)
  File "C:\Users\kiyer\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\local-packages\python38\site-packages\git\cmd.py",line 408,in wait
    raise GitCommandError(self.args,status,errstr)
git.exc.GitCommandError: Cmd('git') Failed due to: exit code(128)
  cmdline: git clone -v https://github.com/NoKodaAddictions/File-Database.git C:\Users\kiyer\Documents\GitHub\SmartRC App\
  stderr: 'fatal: destination path 'C:\Users\kiyer\Documents\GitHub\SmartRC App' already exists and is not an empty directory.

如何使用 gitpython 将存储库克隆到非空文件夹中?

顺便说一下,我是 gitpython 模块的新手。

解决方法

底层程序 git 不允许这样做。您可以 git clone 到一个临时位置,然后将其中的所有内容 mv 到这个位置。

,

虽然默认情况下 git 不允许这样做,但如果您先将其克隆为裸仓库,然后将其解开,然后进行结帐,则无法实现类似的效果:

git clone --bare https://.... path/to/.git
git config --file path/to/.git/config core.bare false
git -C path/to checkout