簡體   English   中英

如何在 windows 上的 python 中刪除 git 存儲庫

[英]How to remove git repository, in python, on windows

如標題所述,我需要使用 python 刪除 git 存儲庫。 我已經看到關於這個相同主題的其他問題,但似乎沒有一個解決方案對我有用。

我的工作:我需要下載一個存儲庫,使用 gitpython,然后檢查一些不相關的東西。 該過程完成后,我需要刪除存儲庫以為使用我的腳本的人節省空間。

問題:克隆 git 存儲庫時,將創建一個.git 文件。 該文件隱藏在windows中,我一直使用的模塊無權刪除.git文件夾內的任何文件。

我試過的:

import shutil
shutil.rmtree('./cloned_repo')

PermissionError: [WinError 5] Access is denied:

任何有關此問題的幫助將不勝感激。

Git 有一些只讀文件。 您需要先更改權限:

import subprocess
import shutil
import os
import stat
from os import path
for root, dirs, files in os.walk("./cloned_repo"):  
    for dir in dirs:
        os.chmod(path.join(root, dir), stat.S_IRWXU)
    for file in files:
        os.chmod(path.join(root, file), stat.S_IRWXU)
shutil.rmtree('./cloned_repo')

如上所述,這是因為 Git 的許多文件都是只讀的,Python 不會在 Windows 上優雅地刪除這些文件。 GitPython 模塊有一個實用程序 function 用於此目的: git.util.rmtree

像這樣調用 function 應該可以解決您的問題:

from git import rmtree
rmtree('./cloned_repo')

您還可以在此處查看它們的來源——截至 2020 年 12 月,它與上面的答案類似。

我已經嘗試了上述所有建議,但沒有一個奏效。

我正在使用 GitPython 模塊來處理我的 git 存儲庫,但我不相信我正在正確處理任何打開的連接。 說我找到了一種方法來殺死所有“修復”我的問題的 git 會話。 (盡管這是一個骯臟的修復)

import os
folder = "path/to/root"
git_repo = git.Repo(folder)
# do something with gitrepo

os.system(f'taskkill /IM "git.exe" /F')

這不是一個好的解決方案,因為您可能打開了其他不想關閉的 git session。 一種方法是確保通過關閉 git session 來關閉它。

git_repo = git.Repo(folder)
#do something with gitrepo
git_repo.close()

雖然更好的方法是使用像'with'這樣的上下文管理器

import git
with git.Repo(folder) as git_repo:
   # do something with gitrepo

上下文管理器可以更輕松地管理 git 存儲庫,並且不太可能在 session 中打開存儲庫,因此不太可能出現只讀訪問錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM