2015-02-03 12 views
6

मैं विशिष्ट एसएसएच कुंजी के साथ गिटपीथन का उपयोग कैसे कर सकता हूं?गिटपाथन और एसएसएच कुंजी?

दस्तावेज उस विषय पर बहुत अच्छी तरह से नहीं है। एकमात्र चीज जिसे मैंने अभी तक आजमाया है Repo(path) है।

उत्तर

7

कृपया ध्यान दें कि निम्नलिखित सभी केवल गिटपीथन v0.3.6 या नए में काम करेंगे।

आप GIT_SSH पर्यावरण चर का उपयोग कर सकते हैं ताकि गिट को निष्पादन योग्य प्रदान किया जा सके जो ssh को इसकी जगह पर कॉल करेगा। इस तरह, जब भी गिट कनेक्ट करने का प्रयास करता है तो आप किसी भी प्रकार की एसएसएच कुंजी का उपयोग कर सकते हैं।

यह काम करता है या तो प्रति का उपयोग कर कॉल एक context manager ...

ssh_executable = os.path.join(rw_dir, 'my_ssh_executable.sh') 
with repo.git.custom_environment(GIT_SSH=ssh_executable): 
    repo.remotes.origin.fetch() 

... या अधिक लगातार अपने भंडार का Git वस्तु की set_environment(...) विधि का उपयोग कर:

old_env = repo.git.update_environment(GIT_SSH=ssh_executable) 
# If needed, restore the old environment later 
repo.git.update_environment(**old_env) 

आप कर सकते हैं के रूप में पर्यावरण चर के किसी भी मात्रा को सेट करें, आप अपने एसएसएच-स्क्रिप्ट के साथ जानकारी पास करने के लिए कुछ का उपयोग कर सकते हैं ताकि वह आपके लिए वांछित एसएसएच कुंजी चुन सकें।

इस सुविधा के बनने के बारे में अधिक जानकारी (GitPython v0.3.6 में नया) आपको in the respective issue मिलेगा।

+1

स्वीकार करने के लिए है कि मैं इस के साथ ही साथ संघर्ष कर रहा हूँ है। मैं वास्तव में एक कस्टम एसएसएच स्क्रिप्ट नहीं लिखूंगा। क्या उपयोग करने की कुंजी की पहचान करने का कोई तरीका है? मैं पाइथन के लिए नया-आश हूं और ट्यूटोरियल/एपीआई बस मुझे काफी नहीं मिल रहा है जहां मुझे यह काम करने के लिए होना चाहिए। धन्यवाद। –

+0

गिट 2.3 के साथ शुरू हो जाता है, यह बहुत अधिक अंतर्निहित है। नए GIT_SSH_COMMAND का उपयोग करके, आप बाहरी स्क्रिप्ट पर निर्भर होने के बजाय, सीधे ssh -i ... आदेश निर्दिष्ट कर सकते हैं। – Byron

+1

धन्यवाद। निम्नलिखित मेरे लिए काम नहीं कर रहा है। मुझे क्या याद आ रहा है (फ़ॉर्मेटिंग टिप्पणियों में बेकार है, लेकिन उम्मीद है कि आपको विचार मिल जाएगा)? 'git_project.git.custom_environment (GIT_SSH_COMMAND =' ssh -i ~/.ssh/id_rsa [email protected] ') के साथ: git_project.remotes.origin.push (git_project.heads.master) '। यदि मैं '-T' विकल्प जोड़ता हूं और कमांड लाइन से निष्पादित करता हूं, तो मैंने अपेक्षित रूप से लॉग इन किया है। मेरे पायथन कोड में समस्या स्वरूपण? –

4

gitpython == पर मेरे लिए काम किया निम्नलिखित 2.1.1

import os 
from git import Repo 
from git import Git 

git_ssh_identity_file = os.path.expanduser('~/.ssh/id_rsa') 
git_ssh_cmd = 'ssh -i %s' % git_ssh_identity_file 

with Git().custom_environment(GIT_SSH_COMMAND=git_ssh_cmd): 
    Repo.clone_from('[email protected]', '/path', branch='my-branch') 
+0

इस उदाहरण में चर 'git' क्या है? –

+0

आपका मतलब गिट @ है? यही रेपो यूआरएल है, उदाहरण के लिए [email protected]: django/django.git –

+0

लाइन '' git.custom_environment (GIT_SSH_COMMAND = git_ssh_cmd) के साथ '' '... ** git ** क्या है? कोई चर या आयात नहीं है जो आपके कोड स्निपेट में गिट को परिभाषित करता है। –

संबंधित मुद्दे