【问题标题】:Python script to git clone without entering a password at the prompt无需在提示符处输入密码即可进行 git clone 的 Python 脚本
【发布时间】:2018-05-28 15:57:23
【问题描述】:

我正在尝试使用 Python 脚本从私有 git 存储库 git clone gitolite@10.10.10.55:/Intel/BareRepos/lteue.git 克隆一个项目。我的脚本的问题是每次从本地存储库克隆项目时都需要手动输入密码。

有没有pythonic的方法可以在不手动输入任何密码的情况下克隆项目?

这是我写的脚本。

import os

path = path/to/save/cloned/project

os.chdir(path)

os.system("git clone gitolite@10.10.10.55:/Intel/BareRepos/lteue.git")#...Clonning

【问题讨论】:

标签: python git gitpython


【解决方案1】:

最好的办法是使用公钥/私钥。但是,我根本不知道gitolite。 (您可能希望将其添加到标签中。)

请注意,我不建议您执行以下操作,除非您知道没有未经授权的人会看到您的脚本。这是一种糟糕的安全做法,等等。

如果您真的希望它使用 Python,我会使用 subprocess.Popen。

from subprocess import Popen, PIPE

password = 'rather_secret_string'

proc = Popen(['git', 'clone', 'gitolite@10.10.10.55:/Intel/BareRepos/lteue.git'], stdin=PIPE)

proc.communicate(password)

【讨论】:

  • 这不起作用。 Git 在接受输入之前可能需要一些延迟,或者它正在使用其他机制来接受输入
【解决方案2】:

我会使用子流程来做到这一点。

所以你使用Popen()创建一个进程,然后你就可以和它通信了。您确实需要使用 PIPE 来获取输入密码。

from subprocess import Popen, PIPE
process = Popen(["git", "clone", "gitolite@10.10.10.55:/Intel/BareRepos/lteue.git"], stdin=PIPE)

process.communicate('password that I send')

这样的事情可能会奏效。

你也可以使用 Pexpect,但我不熟悉那个库。

【讨论】:

    【解决方案3】:

    我不知道为什么上述答案对我不起作用。 但我想出了新的解决方案,它肯定会奏效,而且非常简单。

    这是我的完整代码:

    import os
    import sys
    import shutil
    
    path        =   "/path/to/store/your/cloned/project" 
    clone       =   "git clone gitolite@10.10.10.55:/Intel/BareRepos/lteue.git" 
    
    os.system("sshpass -p your_password ssh user_name@your_localhost")
    os.chdir(path) # Specifying the path where the cloned project has to be copied
    os.system(clone) # Cloning
    
    print "\n CLONED SUCCESSFULLY.! \n"
    

    【讨论】:

      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      相关资源
      最近更新 更多