Python git 저장소를 복제하는 방법
하위 프로세스를 사용하지 않고 git 저장소를 복제하는 파이썬 방법이 있습니까?저는 당신이 추천하는 어떤 종류의 모듈을 사용해도 좋습니다.
GitPython을 사용하면 Git에 대한 좋은 python 인터페이스를 얻을 수 있습니다.
예를 들어, 설치 후 (pip install gitpython
), 새 저장소를 복제하는 경우 clone_from 함수를 사용할 수 있습니다.
from git import Repo
Repo.clone_from(git_url, repo_dir)
Repo 개체 사용에 대한 예는 GitPython 자습서를 참조하십시오.
참고: GitPython은 git를 시스템에 설치하고 시스템의 PATH를 통해 액세스할 수 있어야 합니다.
GitPython이 있습니다.이전에는 들어본 적이 없고 내부적으로도 git 실행 파일을 어딘가에 두는 것에 의존합니다. 게다가 버그가 많을 수도 있습니다.하지만 시도해 볼 가치가 있을 겁니다.
복제하는 방법:
import git
git.Git("/your/directory/to/clone").clone("git://gitorious.org/git-python/mainline.git")
(좋지도 않고 지원되는 방법인지 모르겠지만 효과가 있었습니다.)
제 해결책은 매우 간단하고 간단합니다.암호를 수동으로 입력할 필요도 없습니다.
제 전체 코드는 다음과 같습니다.
import sys
import os
path = "/path/to/store/your/cloned/project"
clone = "git clone gitolite@<server_ip>:/your/project/name.git"
os.system("sshpass -p your_password ssh user_name@your_localhost")
os.chdir(path) # Specifying the path where the cloned project needs to be copied
os.system(clone) # Cloning
파이썬 3의 경우
첫 번째 설치 모듈:
pip3 install gitpython
그리고 나중에 코딩해보세요 :)
from git.repo.base import Repo
Repo.clone_from("https://github.com/*****", "folderToSave")
이것이 당신에게 도움이 되기를 바랍니다.
여기 GitPython으로 레포를 복제하는 동안 진행 상황을 인쇄하는 방법이 있습니다.
import time
import git
from git import RemoteProgress
class CloneProgress(RemoteProgress):
def update(self, op_code, cur_count, max_count=None, message=''):
if message:
print(message)
print('Cloning into %s' % git_root)
git.Repo.clone_from('https://github.com/your-repo', '/your/repo/dir',
branch='master', progress=CloneProgress())
Github의 libgit2 바인딩인 pygit2는 원격 디렉토리를 복제하는 원-라이너를 제공합니다.
clone_repository(url, path,
bare=False, repository=None, remote=None, checkout_branch=None, callbacks=None)
dload를 이용하실 수 있습니다.
import dload
dload.git_clone("https://github.com/some_repo.git")
pip install dload
Dulwich 팁을 사용하면 다음을 수행할 수 있습니다.
from dulwich.repo import Repo
Repo("/path/to/source").clone("/path/to/target")
이것은 여전히 매우 기본적입니다. 객체와 참조를 복사하지만, 베어가 없는 저장소를 만들 경우 아직 작업 트리의 내용을 만들지 않습니다.
꽤 간단한 방법은 URL의 크레딧을 전달하는 것입니다. 하지만 약간 의심스러울 수 있습니다. 주의해서 사용하세요.
import os
def getRepo(repo_url, login_object):
'''
Clones the passed repo to my staging dir
'''
path_append = r"stage\repo" # Can set this as an arg
os.chdir(path_append)
repo_moddedURL = 'https://' + login_object['username'] + ':' + login_object['password'] + '@github.com/UserName/RepoName.git'
os.system('git clone '+ repo_moddedURL)
print('Cloned!')
if __name__ == '__main__':
getRepo('https://github.com/UserName/RepoYouWant.git', {'username': 'userName', 'password': 'passWord'})
gitpython 모듈을 이용한 gitpull과 gitpush의 샘플 코드입니다.
import os.path
from git import *
import git, os, shutil
# create local Repo/Folder
UPLOAD_FOLDER = "LocalPath/Folder"
if not os.path.exists(UPLOAD_FOLDER):
os.makedirs(UPLOAD_FOLDER)
print(UPLOAD_FOLDER)
new_path = os.path.join(UPLOADFOLDER)
DIR_NAME = new_path
REMOTE_URL = "GitURL" # if you already connected with server you dont need to give
any credential
# REMOTE_URL looks "git@github.com:path of Repo"
# code for clone
class git_operation_clone():
try:
def __init__(self):
self.DIR_NAME = DIR_NAME
self.REMOTE_URL = REMOTE_URL
def git_clone(self):
if os.path.isdir(DIR_NAME):
shutil.rmtree(DIR_NAME)
os.mkdir(DIR_NAME)
repo = git.Repo.init(DIR_NAME)
origin = repo.create_remote('origin', REMOTE_URL)
origin.fetch()
origin.pull(origin.refs[0].remote_head)
except Exception as e:
print(str(e))
# code for push
class git_operation_push():
def git_push_file(self):
try:
repo = Repo(DIR_NAME)
commit_message = 'work in progress'
# repo.index.add(u=True)
repo.git.add('--all')
repo.index.commit(commit_message)
origin = repo.remote('origin')
origin.push('master')
repo.git.add(update=True)
print("repo push succesfully")
except Exception as e:
print(str(e))
if __name__ == '__main__':
a = git_operation_push()
git_operation_push.git_push_file('')
git_operation_clone()
git_operation_clone.git_clone('')
창에서 레포를 복제하는 가장 쉬운 방법은 다음과 같습니다.
- pip 설치 클론
- 클론 [REPO] [USERNAME]
예: 클론 와이파이 브루트 사이버 다이옥사이드
셸 명령을 통해 실행할 수 있습니다.
os.system("pip install clone") os.system("clone SSH-Brute Cyber-Dioxide") 가져오기
라이브러리 없이 간단한 솔루션을 사용할 수 있습니다.
#!/usr/bin/python
import os
destination_path = "destination/path/where/project/to/be/cloned"
clone_command = "git clone https://your.git.servername/git-folder/repo-name.git"
clone_with_path = clone_command +" "+ destination_path
os.system(clone_with_path)
권한: 대상 폴더가 없으면 대상 폴더를 만듭니다.
언급URL : https://stackoverflow.com/questions/2472552/python-way-to-clone-a-git-repository
'programing' 카테고리의 다른 글
플록 (): 레이스 조건 없이 잠긴 파일 제거? (0) | 2023.10.27 |
---|---|
부트스트랩과 함께 필드셋 범례 사용 (0) | 2023.10.27 |
자동 완료 시 트리거된 이벤트가 있습니까? (0) | 2023.10.27 |
PowerShell에서 명명된 매개 변수를 [ref]로 정의하는 방법 (0) | 2023.10.27 |
editline/history.h 및 editline/readline.h를 찾을 수 없음/이미 설치된 개발자 도구로 컴파일하려고 할 때 macOS에서 작동함 (0) | 2023.10.27 |