क्या गीथ भंडार को क्लोन करने के लिए एक उपप्रकार का उपयोग किए बिना एक पायथन तरीका है? मैं आपके द्वारा सुझाए गए किसी भी प्रकार के मॉड्यूल का उपयोग करने के लिए तैयार हूं।
git clone
वैसे भी कॉल करना है।
क्या गीथ भंडार को क्लोन करने के लिए एक उपप्रकार का उपयोग किए बिना एक पायथन तरीका है? मैं आपके द्वारा सुझाए गए किसी भी प्रकार के मॉड्यूल का उपयोग करने के लिए तैयार हूं।
git clone
वैसे भी कॉल करना है।
जवाबों:
नहीं है GitPython । इसके बारे में पहले और आंतरिक रूप से नहीं सुना गया था, यह कहीं न कहीं जीआईटी निष्पादन योग्य होने पर निर्भर करता है; इसके अतिरिक्त, उनके पास बहुत सारे कीड़े हो सकते हैं। लेकिन यह एक कोशिश के काबिल हो सकता है।
क्लोन कैसे करें :
import git
git.Git("/your/directory/to/clone").clone("git://gitorious.org/git-python/mainline.git")
(यह अच्छा नहीं है और मुझे नहीं पता कि यह करने का समर्थन तरीका है, लेकिन यह काम किया।)
GitPython का उपयोग करने से आपको Git को एक अच्छा अजगर इंटरफ़ेस मिलेगा।
उदाहरण के लिए, इसे स्थापित करने के बाद ( pip install gitpython
), एक नए रिपॉजिटरी को क्लोन करने के लिए आप clone_from फ़ंक्शन का उपयोग कर सकते हैं :
from git import Repo
Repo.clone_from(git_url, repo_dir)
रेपो ऑब्जेक्ट का उपयोग करने के उदाहरणों के लिए GitPython ट्यूटोरियल देखें ।
नोट: GitPython को सिस्टम पर स्थापित किया जा रहा है, और सिस्टम के PATH के माध्यम से पहुंच योग्य होना चाहिए।
मेरा समाधान बहुत सरल और सीधे आगे है। इसे पासफ़्रेज़ / पासवर्ड की मैन्युअल प्रविष्टि की भी आवश्यकता नहीं है।
यहाँ मेरा पूरा कोड है:
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
os.getcwd()
इसे बदलने से पहले सही काम करने वाली निर्देशिका को याद रखना चाहते हैं os.chdir(...)
और बाद में इसे फिर से सेट कर सकते हैं।
git clone <repo_url> <target_path>
। उपयोग करने की आवश्यकता नहीं हैchdir
यहाँ 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())
अजगर 3 के लिए
पहला मॉड्यूल स्थापित करें:
pip3 install gitpython
और बाद में, इसे कोड करें :)
import os
from git.repo.base import Repo
Repo.clone_from("https://github.com/*****", "folderToSave")
मैं आशा करता हूं कि इससे तुम्हें सहायता मिलेगी
डुलविच टिप के साथ आपको ऐसा करने में सक्षम होना चाहिए:
from dulwich.repo import Repo
Repo("/path/to/source").clone("/path/to/target")
यह अभी भी बहुत बुनियादी है - यह ऑब्जेक्ट्स और रेफ्स पर कॉपी करता है, लेकिन अगर आप नंगे-नंगे रिपॉजिटरी बनाते हैं तो यह अभी तक वर्किंग ट्री की सामग्री नहीं बनाता है।
सुंदर सरल विधि सिर्फ उर में क्रेडिट पास करना है, हालांकि थोड़ा संदेह हो सकता है - सावधानी के साथ उपयोग करें।
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('')
आप डोड का उपयोग कर सकते हैं
import dload
dload.git_clone("https://github.com/some_repo.git")
pip install dload