Git开源工具PyDriller、git-remote-hg、Gitlab Shell、go-git介绍

以下为你介绍的Git开源工具都可用在Linux系统上:PyDriller(解析 Git repo 的 Python 框架)、git-remote-hg(通过 git 命令获取 Mercurial 仓库)、Gitlab Shell(处理GitLab的git SSH会话)、go-git(Git 的 Go 语言实现)。

1、PyDriller(解析 Git repo 的 Python 框架)

Git开源工具PyDriller、git-remote-hg、Gitlab Shell、go-git介绍

PyDriller 是一个可以帮助开发人员解析 Git 存储库的 Python 框架,开发者可以通过 PyDriller 轻松提取 commit、开发人员、修改、diff 和源码等信息。

@inproceedings{Spadini2018,

address = {New York, New York, USA},

author = {Spadini, Davide and Aniche, Maur\'{i}cio and Bacchelli, Alberto},

booktitle = {Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering - ESEC/FSE 2018},

doi = {10.1145/3236024.3264598},

isbn = {9781450355735},

keywords = {2018,acm reference format,and alberto bacchelli,davide spadini,git,gitpython,maur\'{i}cio aniche,mining software repositories,pydriller,python},

pages = {908--911},

publisher = {ACM Press},

title = {{PyDriller: Python framework for mining software repositories}},

url = {http://dl.acm.org/citation.cfm?doid=3236024.3264598},

year = {2018}

}

安装:

使用pip可以轻松完成PyDriller的安装,假设已安装,只需从命令行运行以下命令:

pip install pydriller

这还将安装必要的依赖项。

源代码:

如果您想从源代码克隆,则可以通过非常简单的步骤来完成,首先,克隆仓库:

> git clone https://github.com/ishepard/pydriller.git

> cd pydriller

可选的:

建议使用virtualenv:

> virtualenv -p python3 venv

> source venv/bin/activate

安装需求并运行测试:

安装要求:

> pip install -r requirements.txt

运行测试(使用pytest):

> unzip test-repos.zip

> pip install -r test-requirements.txt

> pytest

下载地址:https://github.com/ishepard/pydriller

2、git-remote-hg(通过 git 命令获取 Mercurial 仓库)

git-remote-hg 是对 git 工具的一个扩展,实现通过 git 命令获取 Mercurial 仓库的方法。

使用方法:

git clone "hg::http://selenic.com/repo/hello"

安装:

wget https://raw.github.com/felipec/git-remote-hg/master/git-remote-hg -O ~/bin/git-remote-hg

chmod +x ~/bin/git-remote-hg

下载地址:https://github.com/felipec/git-remote-hg

3、Gitlab Shell(处理GitLab的git SSH会话)

GitLab Shell处理GitLab的git SSH会话并修改授权密钥列表。GitLab Shell不是Unix shell,也不是Bash或Zsh的替代品。

如果你需要使用 SSH 来使用 Gitlab 服务则需要安装该项目。

当您通过SSH访问GitLab服务器时,GitLab Shell将:

将您限制为预定义的git命令(git push,git pull)。

调用GitLab Rails API来检查您是否被授权以及您的存储库所在的Gitaly服务器。

在SSH客户端和Gitaly服务器之间来回复制数据。

上述情况的概述:

git over SSH-> gitlab-shell-> API调用gitlab-rails(Authorization)->接受或拒绝->建立Gitaly会话。

git push over SSH-> gitlab-shell(尚未执行git命令)->建立Gitaly会话->(在Gitaly中)gitlab-shell pre-receive hook->对gitlab-rails的API调用(授权)->接受或下降推动。

下载地址:https://github.com/gitlabhq/gitlab-shell

4、go-git(Git 的 Go 语言实现)

Git开源工具PyDriller、git-remote-hg、Gitlab Shell、go-git介绍

go-git 是一个 Go 语言实现的高度可扩展的 Git 实现库。可以使用友好的 API 来管理 Git 的仓库。支持不同类型的存储,包括内存文件系统,也可以通过接口 Storer实现对存储的扩展。

该项目从 2015 年开始开发。项目旨在兼容 git,所有的操作实现与git完全一样。

基本示例:

一个实现 git clone 的最基本示例:

// Clone the given repository to the given directory

Info("git clone https://github.com/src-d/go-git")

_, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{

URL:      "https://github.com/src-d/go-git",

Progress: os.Stdout,

})

CheckIfError(err)

输出结果:

Counting objects: 4924, done.

Compressing objects: 100% (1333/1333), done.

Total 4924 (delta 530), reused 6 (delta 6), pack-reused 3533

实现内存存储的示例:

将 git 仓库克隆到内存中,并打印 HEAD 的历史记录,类似 git log:

// Clones the given repository in memory, creating the remote, the local

// branches and fetching the objects, exactly as:

Info("git clone https://github.com/src-d/go-siva")

r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{

URL: "https://github.com/src-d/go-siva",

})

CheckIfError(err)

// Gets the HEAD history from HEAD, just like this command:

Info("git log")

// ... retrieves the branch pointed by HEAD

ref, err := r.Head()

CheckIfError(err)

// ... retrieves the commit history

cIter, err := r.Log(&git.LogOptions{From: ref.Hash()})

CheckIfError(err)

// ... just iterates over the commits, printing it

err = cIter.ForEach(func(c *object.Commit) error {

fmt.Println(c)

return nil

})

CheckIfError(err)

输出结果:

commit ded8054fd0c3994453e9c8aacaf48d118d42991e

Author: Santiago M. Mola <santi@mola.io>

Date:   Sat Nov 12 21:18:41 2016 +0100

index: ReadFrom/WriteTo returns IndexReadError/IndexWriteError. (#9)

commit df707095626f384ce2dc1a83b30f9a21d69b9dfc

Author: Santiago M. Mola <santi@mola.io>

Date:   Fri Nov 11 13:23:22 2016 +0100

readwriter: fix bug when writing index. (#10)

When using ReadWriter on an existing siva file, absolute offset for

index entries was not being calculated correctly.

...

安装:

推荐的安装方式是:

go get -u gopkg.in/src-d/go-git.v4/...

我们使用gopkg.in来对API进行版本控制,这意味着go get会克隆该程序包。

下载地址:https://github.com/src-d/go-git

注明

以上就是Git开源工具PyDriller、git-remote-hg、Gitlab Shell、go-git的介绍内容,这些Git开源工具都能使用在Linux操作系统中。

栏目相关文章