programing

Python git 저장소를 복제하는 방법

yellowcard 2023. 10. 27. 21:51
반응형

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('')

창에서 레포를 복제하는 가장 쉬운 방법은 다음과 같습니다.

  1. pip 설치 클론
  2. 클론 [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

반응형