标签: gitpython

python没有获取环境变量,但它是在mac os上设置的

如果我运行 env 命令,我会得到以下输出:

TERM_PROGRAM=Apple_Terminal
GPG_AGENT_INFO=/Users/paganotti/.gnupg/S.gpg-agent:346:1
TERM=xterm-color
SHELL=/bin/bash
TMPDIR=/var/folders/BM/BMT-0W4+H5yVS5fJngFdsk+++TI/-Tmp-/
Apple_PubSub_Socket_Render=/tmp/launch-V50MvM/Render
TERM_PROGRAM_VERSION=273.1
USER=paganotti
COMMAND_MODE=unix2003
SSH_AUTH_SOCK=/tmp/launch-llkTBf/Listeners
__CF_USER_TEXT_ENCODING=0x1F5:0:0
PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin:/opt/local/bin:/opt/local/sbin:/Library/Frameworks/Python.framework/Versions/3.2/bin:/Users/paganotti/Documents/Project/ZendFramework-1.11.11-minimal/bin/zf.sh:/opt/local/bin:/opt/local/sbin:/opt/local/bin:/opt/local/sbin://usr/local/git/bin/git:/Library/Frameworks/Python.framework/Versions/3.1/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/usr/local/ImageMagick/bin:/usr/local/MacGPG2/bin:/usr/texbin:/usr/X11/bin:/Users/paganotti/Sviluppo/android-sdk-1.5_r3/tools
PWD=/Users/paganotti
LANG=it_IT.UTF-8
SHLVL=1
HOME=/Users/paganotti
LOGNAME=paganotti
GIT_PYTHON_GIT_EXECUTABLE=/usr/local/git/bin/git
DISPLAY=/tmp/launch-aqcM4a/org.x:0
_=/usr/bin/env
Run Code Online (Sandbox Code Playgroud)

我尝试使用 python 获取 GIT_PYTHON_GIT_EXECUTABLE 变量:

    GIT_PYTHON_GIT_EXECUTABLE = os.getenv('GIT_PYTHON_GIT_EXECUTABLE')
    print GIT_PYTHON_GIT_EXECUTABLE
Run Code Online (Sandbox Code Playgroud)

但输出打印:

    None
Run Code Online (Sandbox Code Playgroud)

因为似乎没有查看 GIT_PYTHON_GIT_EXECUTABLE 变量?怎么了?

更新

我在 pycharm 中设置了环境变量,现在它读取了该变量,但在我的实际应用程序中,我使用 pyqt 库的 QThread 类。我的应用程序构建在 pyqt 库之上,启动时它执行 Qthread。在 Qthread 中将执行 gitpython 函数。GitPython 函数启动一个子进程并尝试读取 GIT_PYTHON_GIT_EXECUTABLE,但它无法读取变量。

python qt environment-variables pyqt4 gitpython

2
推荐指数
1
解决办法
6823
查看次数

获取两次提交或分支之间已更改文件的列表

我是Python / Git newb,但是我正在尝试编写一个脚本,该脚本以两个分支或提交作为参数,并显示两个之间的更改文件列表,而不是常规diff附带的所有无关信息。

这是通过使用以下命令在bash脚本中完成的

git diff --name-only FIRSTBRANCH...SECONDBRANCH
Run Code Online (Sandbox Code Playgroud)

但是使用gitpython转换为Python脚本并不容易。如果有人知道如何执行此操作,那就太好了。

编辑:这是一些代码

user = str(sys.argv[1])
password = str(sys.argv[2])
currentBranch = str(sys.argv[3])
compBranch = str(sys.argv[4])

repo = Repo(directory)
currentCommit = repo.commit(currentBranch)
compCommit = repo.commit(compBranch)
diffed = repo.diff(currentBranch, compBranch)
Run Code Online (Sandbox Code Playgroud)

当我只想要更改文件列表时,print diff将返回所有diff详细信息

python git bash shell gitpython

2
推荐指数
1
解决办法
4094
查看次数

是否有 git Shortlog 的 python 接口?

我正在尝试将 git 中的日志信息获取到 python 中。我查看了 pygit2 和 gitpython,但似乎都没有提供类似于 git Shortlog 的高级接口。是否有一个 python 库提供了这样的接口,或者我应该调用 git 可执行文件?

python git gitpython

2
推荐指数
1
解决办法
1007
查看次数

GitPython 列出特定文件的所有提交

我正在编写一个 Python 脚本,我需要知道特定文件的所有提交。在我的代码中,我使用GitPython来执行其他任务,但对于这个问题我找不到任何东西。

在命令行中我使用:

git log --pretty='%H' file-path
Run Code Online (Sandbox Code Playgroud)

python git gitpython

2
推荐指数
1
解决办法
7440
查看次数

阻止 GitPython 在尝试克隆不存在的远程存储库时询问凭据

在下面的程序片段中,我从远程位置克隆了一个现有的存储库,它工作正常。

然后我尝试克隆一个不存在的存储库,这次调用git.Repo.clone_from()从键盘请求名称和密码。

在我的应用程序中,等待键盘输入时发生阻塞是非常不可取的,因此如果存储库不存在,我希望调用git.Repo.clone_from()来抛出异常。

有什么方法可以导致这种情况发生,或者在我尝试克隆它之前以某种方式检测现有 URL 上是否存在 git 存储库?

import git, shutil

DIRECTORY = '/tmp/clone'


def clone(url):
    print(url)
    shutil.rmtree(DIRECTORY, ignore_errors=True)
    git.Repo.clone_from(url=url, to_path=DIRECTORY, b='master')


clone('https://github.com/ManiacalLabs/BiblioPixelAnimations.git/')
clone('https://github.com/ManiacalLabs/NONEXISTENT.git/')
Run Code Online (Sandbox Code Playgroud)

python gitpython

2
推荐指数
1
解决办法
2692
查看次数

GitPython无法设置git config用户名和电子邮件

我正在编写一个Python脚本,该脚本使用GitPython(https://gitpython.readthedocs.io/en/stable/)将本地文件提交到远程存储库。对文件进行编辑后,我设置了用户名和电子邮件的值,如以下代码片段所示:

      repo = git.Repo.init("my local clone path")
      repo.config_writer().set_value("name", "email", "myusername").release()
      repo.config_writer().set_value("name", "email", "myemail").release()
      repo.git.add("filename")
      repo.git.commit("filename")
      repo.git.push("my remote repo url")
Run Code Online (Sandbox Code Playgroud)

我总是遇到以下错误:

 stderr: '
*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.
Run Code Online (Sandbox Code Playgroud)

即使我已经使用config_writer()函数设置了用户名和密码,如此处所述:http ://gitpython.readthedocs.io/en/stable/tutorial.html#handling-remotes

任何有关如何解决此问题的建议将不胜感激。

python git git-push gitpython

2
推荐指数
1
解决办法
2395
查看次数

使用 GitPython 反向读取提交

有没有一种方法可以使用 GitPython 库反向迭代提交,即从最旧的到最新的,其方式类似于:

>>> from git import Repo
>>> repo = Repo('/path/to/repo')
>>> for commit in reversed(repo.iter_commits()):
...     print commit
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: argument to reversed() must be a sequence
Run Code Online (Sandbox Code Playgroud)

不必首先将所有内容都包含在内存中,因为我的情况是处理大量提交(例如linux内核)?

python gitpython

2
推荐指数
1
解决办法
2766
查看次数

使用 gitpython 解析 git log

在python中,我想获取git存储库中文件的所有提交的日志并解析日志中的信息(哈希、作者姓名、作者邮件、作者日期、提交者姓名、提交者邮件、提交日期和提交消息) . 目前,我可以使用 gitpython 或通过子进程调用 shell 命令来获取原始 git 日志。

使用 gitpython:

g=git.Git(path)
loginfo=g.log("--pretty=fuller",'--follow',"<filename>")
Run Code Online (Sandbox Code Playgroud)

使用子过程调用:

lines = subprocess.check_output(
        ['git', 'log','--follow',"--pretty=fuller"," 
         <filename"],stderr=subprocess.STDOUT)
Run Code Online (Sandbox Code Playgroud)

但是,在那之后我想解析原始日志,但我无法在 gitpython 中找到合适的库/方法。此外,我还希望以 python 日期时间格式解析日期。你能帮我吗?

python git git-log gitpython

2
推荐指数
1
解决办法
6461
查看次数

如何使用 gitpython 获取提交作者姓名和电子邮件?

当我运行时git log,每次提交都会得到这一行:“作者:姓名 <电子邮件>”。如何在 Python 中为本地存储库获取完全相同的提交格式?当我运行下面的代码时,我只得到作者姓名。

from git import Repo

repo_path = 'mockito'
repo = Repo(repo_path)

commits_list = list(repo.iter_commits())

for i in range(5):
    commit = commits_list[i]

    print(commit.hexsha)
    print(commit.author)
    print(commit.committer)
Run Code Online (Sandbox Code Playgroud)

python git gitpython

2
推荐指数
2
解决办法
2212
查看次数

如何在 GitPython 中向 Git 存储库添加已修改、已删除、未跟踪的内容

我认为 update=True 会将所有已修改、已删除和未跟踪的文件添加到索引中。我不知道方法是什么。有人可以帮我吗?

repo = Repo(working_repository_url)
repo.git.add(update=True)
repo.index.commit(my_msg)
Run Code Online (Sandbox Code Playgroud)

我是说。我当然可以得到:

untracked_items = repo.untracked_files
Run Code Online (Sandbox Code Playgroud)

这仅适用于未跟踪的文件。我想将未跟踪的文件、删除的、修改的文件添加到索引中,然后对所有文件进行提交。

我更有可能正在寻找相当于git add --all

python git gitpython

2
推荐指数
1
解决办法
1万
查看次数

标签 统计

gitpython ×10

python ×10

git ×7

bash ×1

environment-variables ×1

git-log ×1

git-push ×1

pyqt4 ×1

qt ×1

shell ×1