标签 Github 下的文章

使用 Pelican 创建博客,这是一个基于 Python 的平台,与 GitHub 配合的不错。

GitHub 是一个非常流行的用于源代码控制的 Web 服务,它使用 Git 同步本地文件和 GitHub 服务器上保留的副本,这样你就可以轻松地共享和备份你的工作。

除了为代码仓库提供用户界面之外,GitHub 还运允许用户直接从仓库发布网页。GitHub 推荐的网站生成软件包是 Jekll,是使用 Ruby 编写的。因为我是 Python 的忠实粉丝,所以我更喜欢 Pelican,这是一个基于 Python 的博客平台,可与 GitHub 很好地协同工作。

Pelican 和 Jekll 都可以将 MarkdownreStructuredText 中编写的内容转换为 HTML 以生成静态网站,并且两个生成器都支持定制的主题。

在本文中,我将介绍如何安装 Pelican、设置 GitHub 仓库、运行快速入门帮助、编写一些 Markdown 文件以及发布第一篇博客。我假设你有一个 GitHub 账户,熟悉基础的 Git 命令,并且想使用 Pelican 发布博客。

安装 Pelican 并创建仓库

首先,你必须在本地计算机上安装 Pelican 和 ghp-import。使用 Python 软件包安装工具 pip(你有,对吧?),这非常容易:

$ pip install pelican ghp-import Markdown

然后,打开浏览器并在 GitHub 上为你新鲜出炉的博客创建一个新仓库,命名如下(在此处以及整个教程中,用 GitHub 用户名替换 username):

https://GitHub.com/username/username.github.io

让它保持为空,稍后我们用引人注目的博客内容来填充它。

使用命令行(确保正确),将这个空 Git 仓库克隆到本地计算机:

$ git clone <https://GitHub.com/username/username.github.io> blog
$ cd blog

奇怪的把戏…

在 GitHub 上发布 Web 内容有一个不太引入注意的技巧,对于托管在名为 username.github.io 的仓库的用户页面,其内容由 master 分支提供服务。

我强烈建议所有的 Pelican 配置文件和原始的 Markdown 文件都不要保留在 master 中,master 中只保留 Web 内容。因此,我将 Pelican 配置和原始内容保留在一个我喜欢称为 content 的单独分支中。(你可以随意创建一个分支,但以下内容沿用 content。)我喜欢这种结构,因为我可以放弃掉 master 中的所有文件,然后用 content 分支重新填充它。

$ git checkout -b content
Switched to a new branch 'content'

配置 Pelican

现在该进行内容配置了。Pelican 提供了一个很棒的初始化工具 pelican-quickstart,它会询问你有关博客的一系列问题。

$ pelican-quickstart
Welcome to pelican-quickstart v3.7.1.

This script will help you create a new Pelican-based website.

Please answer the following questions so this script can generate the files
needed by Pelican.

> Where do you want to create your new web site? [.]  
> What will be the title of this web site? Super blog
> Who will be the author of this web site? username
> What will be the default language of this web site? [en]
> Do you want to specify a URL prefix? e.g., http://example.com   (Y/n) n
> Do you want to enable article pagination? (Y/n)
> How many articles per page do you want? [10]
> What is your time zone? [Europe/Paris] US/Central
> Do you want to generate a Fabfile/Makefile to automate generation and publishing? (Y/n) y
> Do you want an auto-reload & simpleHTTP script to assist with theme and site development? (Y/n) y
> Do you want to upload your website using FTP? (y/N) n
> Do you want to upload your website using SSH? (y/N) n
> Do you want to upload your website using Dropbox? (y/N) n
> Do you want to upload your website using S3? (y/N) n
> Do you want to upload your website using Rackspace Cloud Files? (y/N) n
> Do you want to upload your website using GitHub Pages? (y/N) y
> Is this your personal page (username.github.io)? (y/N) y
Done. Your new project is available at /Users/username/blog

你可以对每个问题都采用默认值,但除了以下这些问题:

  • 网站标题,应该唯一且特殊
  • 网站作者,可以是个人用户名或你的全名
  • 时区,可能你不在巴黎
  • 上传到 GitHub 页面,我们选择 y

回答完所有问题后,Pelican 会在当前目录中留下以下内容:

$ ls
Makefile      content/     develop_server.sh*
fabfile.py    output/      pelicanconf.py
publishconf.py

你可以查看 Pelican 文档来了解如何使用这些文件,但现在我们要做的是完成手头的工作。说实话,我也没有阅读文档。

继续

将所有 Pelican 生成的文件添加到本地 Git 仓库的 content 分支,提交更改,然后将本地更改推送到 Github 上托管的远程仓库:

$ git add .
$ git commit -m 'initial pelican commit to content'
$ git push origin content

这件事情并不是特别令人兴奋,但是如果我们需要撤销这些文件之一的修改时,这将非常方便。

终于

终于,现在你得到一个博客了!你所有的博客文章、照片、图像、PDF 等都将位于 content 目录中,它最初是空的。要开始创建第一篇博客和关于页面,输入:

$ cd content
$ mkdir pages images
$ cp /Users/username/SecretStash/HotPhotoOfMe.jpg images
$ touch first-post.md
$ touch pages/about.md

接下来,在你喜欢的文本编辑器中打开 first-post.md,并添加以下内容:

title: First Post on My Sweet New Blog
date: <today's date>
author: Your Name Here

# I am On My Way To Internet Fame and Fortune!

This is my first post on my new blog. While not super informative it
should convey my sense of excitement and eagerness to engage with you,
the reader!

前三行是 Pelican 用于组织内容的元数据。有很多不同的元数据可供你选择。再说一次,文档是你了解更多选项的最佳选择。

现在,打开空白文件 pages/about.md 并添加以下文本:

title: About
date: <today's date>

![So Schmexy][my_sweet_photo]

Hi, I am <username> and I wrote this epic collection of Interweb
wisdom. In days of yore, much of this would have been deemed sorcery
and I would probably have been burned at the stake.

?

现在,content 目录中将包含三个新的 Web 内容,在 content 分支中还有很多内容。

发布

不要急,马上要见到成果了!

剩下要做的就是:

  • 运行 Pelican 以在 output 中生成静态 HTML 文件:
$ pelican content -o output -s publishconf.py
  • 使用 ghp-importoutput 目录的内容添加到 master 分支中:
$ ghp-import -m "Generate Pelican site" --no-jekyll -b master output
  • 将本地 master 分支推送到远程仓库:
$ git push origin master
  • 提交新内容并将其推送到 content 分支
$ git add content
$ git commit -m 'added a first post, a photo and an about page'
$ git push origin content

OMG,我成功了

现在最激动的时候到了,当你想要看到你发布给大家的博客内容时,打开浏览器输入:

https://username.github.io

恭喜你可以在 GitHub 上发布自己的博客了!当你想添加更多页面或文章时,都可以按照上面的步骤来。希望你可以愉快地发布博客。


via: https://opensource.com/article/19/5/run-your-blog-github-pages-python

作者:Erik O'Shaughnessy 选题:lujun9972 译者:MjSeven 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

通过使用 Ansible 镜像 Git 存储库,保护对重要项目的访问。

开源无处不在。它在家里的计算机上、在工作场所的计算机上、在互联网上,并且很多都由 Git 管理。由于 Git 是分布式的,因此许多人也将其视为一种众包的备份解决方案。从理论上讲,每当有人将 Git 存储库克隆到其本地计算机时,他们就创建了该项目源代码的备份。如果有 100 个人这样做,则存储库就有 100 个备份副本。

从理论上讲,这可以缓解“灾难”的影响,例如当项目维护者突然决定删除存储库莫名其妙地阻止所有流量,导致开发人员们无头苍蝇般地寻找谁拥有主分支的最新版本。类似的,整个代码托管站点也会消失。没有人会想到 Google Code、Microsoft CodePlex 或 Gitorious 会在鼎盛时期将被关闭。

简而言之,如果在过去的几十年中互联网教给了我们一些东西,那就是依靠互联网神奇地创建备份并不是冗余的最可靠途径。

此外,对于许多人来说,很多开源项目都托管在 GitHub 上是个问题 —— GitHub 并不是开放平台。许多开发人员和用户都希望支持诸如 GitLab 之类的堆栈并与之交互,它具有开源社区版本。

使用 Ansible 管理 Git

Git 的去中心方式对于解决这个问题很有用。使用纯 Git,你可以使用一个 push 命令轻松地将其推到两个或多个存储库。但是,为了使其在发生意外故障时有用,你必须经常与 Git 存储库进行交互(特别是推送)。此外,即使你可能永远不会自己推送或拉出代码,也可能有一些要备份的存储库。

但是,使用 Ansible,你可以自动执行项目主分支(或其他任何分支)的 Git 拉取,然后自动进行存储库到“异地”镜像的 Git 推送。换句话说,你可以让你的计算机定期从 GitHub 拉取并推送到 GitLab 或 Gitolite 或 Gitea(或你喜欢的任何 Git 托管主机)。

Ansible 模块

如果不是因其出色的模块集合,那么 Ansible 就没那么出色。像 Python 的第三方库或 Linux 的应用程序一样,这个技术引擎的一个有用而令人惊讶的简单技巧是,Ansible 以其他人贡献的组件而闻名。因为本文正在研究如何有效和可靠地备份 Git 存储库,所以这里使用的模块是 Git 模块ini\_file 模块。

首先,创建一个名为 mirror.yaml 的文件作为 剧本 playbook 。你可以像通常使用 Ansible 一样,从 nametask 条目开始。本示例将 localhost 添加到 hosts 列表中,以便在控制器计算机(你现在坐在前面的计算机)上运行 动作 play ,但是在现实生活中,你可能会在特定的主机或一组网络上的主机上运行它。

---
- name: "Mirror a Git repo with Ansible"
  hosts: localhost
  tasks:

Git 拉取和克隆

如果要进行备份,则需要最新代码的副本。明显,在 Git 仓库中实现这一目标的方法是执行 git pull。 但是,pull 会假定克隆已经存在,而写得很好的 Ansible 动作(Ansible 脚本)则尽可能少的假定。最好告诉 Ansible 先克隆存储库。

将你的第一个任务添加到剧本:

---
- name: "Mirror a Git repo with Ansible"
  hosts: localhost
  vars:
    git_dir: /tmp/soso.git
  tasks:

  - name: "Clone the git repo"
    git:
       repo: 'https://github.com/ozkl/soso.git'
       dest: '{{ git_dir }}'
       clone: yes
       update: yes

这个例子使用了开源的、类似于 Unix 的操作系统 soso 作为我要镜像的存储库。这是一个完全任意的选择,绝不意味着我对该存储库的未来缺乏信心。它还使用变量来引用目标文件夹 /tmp/soso.git,这很方便,并且如果以后你希望将它扩展为一个通用的镜像脚本也会受益。在现实生活中,你的工作机上可能会比 /tmp 具有更永久的位置,例如 /home/gitmirrors/soso.git/opt/gitmirrors/soso.git

运行你的剧本:

$ ansible-playbook mirror.yaml

首次运行该剧本时,Ansible 会正确检测到 Git 存储库在本地尚不存在,因此将其克隆。

PLAY [Ansible Git mirror] ********

TASK [Gathering Facts] ***********
ok: [localhost]

TASK [Clone git repo] ************
changed: [localhost]

PLAY RECAP ***********************
localhost: ok=2 changed=1 failed=0 [...]

如果你再次运行该剧本,Ansible 会正确检测到自上次运行以来没有任何更改,并且会报告未执行任何操作:

localhost: ok=2 changed=0 failed=0 [...]

接下来,必须指示 Ansible 将存储库推送到另一个 Git 服务器。

Git 推送

Ansible 中的 Git 模块不提供 push 功能,因此该过程的一部分是手动的。但是,在将存储库推送到备用镜像之前,你必须具有一个镜像,并且必须将镜像配置为备用 远程服务器 remote

首先,必须将备用的远程服务器添加到 Git 配置。因为 Git 配置文件是 INI 样式的配置,所以你可以使用 ini_file Ansible 模块轻松地添加所需的信息。将此添加到你的剧本:

 - name: "Add alternate remote"
    ini_file: dest={{ git_dir }}/.git/config section='remote \"mirrored\"' option=url value='[email protected]:example/soso-mirror.git'
    tags: configuration

为此,你必须在目标服务器上有一个空的存储库(在本例中为 GitLab.com)。如果需要在剧本中创建目标存储库,可以按照 Steve Ovens 的出色文章《如何使用 Ansible 通过 SSH 设置 Git 服务器》来完成。

最后,直接使用 Git 将 HEAD 推送到备用远程服务器:

 - name: "Push the repo to alternate remote"
    shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'

像往常一样运行该剧本,然后使该过程自动化,这样你就不必再次直接运行它了。你可以使用变量和特定的 Git 命令来调整脚本以适应你的需求,但是通过常规的拉取和推送操作,可以确保驻留在一台服务器上的重要项目可以安全地镜像到另一台服务器上。

这是完整的剧本,供参考:

---
- name: "Mirror a Git repository with Ansible"
  hosts: localhost
  vars:
    git_dir: /tmp/soso.git

  tasks:

  - name: "Clone the Git repo"
    git:
       repo: 'https://github.com/ozkl/soso.git'
       dest: '{{ git_dir }}'
       clone: yes
       update: yes

  - name: "Add alternate remote"
    ini_file: dest={{ git_dir }}/.git/config section='remote \"mirrored\"' option=url value='[email protected]:example/soso-mirror.git'
    tags: configuration
 
  - name: "Push the repo to alternate remote"
    shell: 'git --verbose --git-dir={{ git_dir }}/.git push mirrored HEAD'

via: https://opensource.com/article/19/11/how-host-github-gitlab-ansible

作者:Seth Kenlon 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

学习如何复刻一个仓库,进行更改,并要求维护人员审查并合并它。

你知道如何使用 git 了,你有一个 GitHub 仓库并且可以向它推送。这一切都很好。但是你如何为他人的 GitHub 项目做出贡献? 这是我在学习 git 和 GitHub 之后想知道的。在本文中,我将解释如何 复刻 fork 一个 git 仓库、进行更改并提交一个 拉取请求 pull request

当你想要在一个 GitHub 项目上工作时,第一步是复刻一个仓库。

 title=

你可以使用我的演示仓库试一试。

当你在这个页面时,单击右上角的 “Fork”(复刻)按钮。这将在你的 GitHub 用户账户下创建我的演示仓库的一个新副本,其 URL 如下:

https://github.com/<你的用户名>/demo

这个副本包含了原始仓库中的所有代码、分支和提交。

接下来,打开你计算机上的终端并运行命令来 克隆 clone 仓库:

git clone https://github.com/<你的用户名>/demo

一旦仓库被克隆后,你需要做两件事:

1、通过发出命令创建一个新分支 new_branch

git checkout -b new_branch

2、使用以下命令为上游仓库创建一个新的 远程 remote

git remote add upstream https://github.com/kedark3/demo

在这种情况下,“上游仓库”指的是你创建复刻来自的原始仓库。

现在你可以更改代码了。以下代码创建一个新分支,进行任意更改,并将其推送到 new_branch 分支:

$ git checkout -b new_branch
Switched to a new branch ‘new_branch’
$ echo “some test file” &gt; test
$ cat test
Some test file
$ git status
On branch new_branch
No commits yet
Untracked files:
  (use "git add &lt;file&gt;..." to include in what will be committed)
    test
nothing added to commit but untracked files present (use "git add" to track)
$ git add test
$ git commit -S -m "Adding a test file to new_branch"
[new_branch (root-commit) 4265ec8] Adding a test file to new_branch
 1 file changed, 1 insertion(+)
 create mode 100644 test
$ git push -u origin new_branch
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 918 bytes | 918.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
Remote: Create a pull request for ‘new_branch’ on GitHub by visiting:
Remote:   <http://github.com/example/Demo/pull/new/new\_branch>
Remote:
 * [new branch]         new_branch -&gt; new_branch

一旦你将更改推送到您的仓库后, “Compare & pull request”(比较和拉取请求)按钮将出现在GitHub。

 title=

单击它,你将进入此屏幕:

 title=

单击 “Create pull request”(创建拉取请求)按钮打开一个拉取请求。这将允许仓库的维护者们审查你的贡献。然后,如果你的贡献是没问题的,他们可以合并它,或者他们可能会要求你做一些改变。

精简版

总之,如果您想为一个项目做出贡献,最简单的方法是:

  1. 找到您想要贡献的项目
  2. 复刻它
  3. 将其克隆到你的本地系统
  4. 建立一个新的分支
  5. 进行你的更改
  6. 将其推送回你的仓库
  7. 单击 “Compare & pull request”(比较和拉取请求)按钮
  8. 单击 “Create pull request”(创建拉取请求)以打开一个新的拉取请求

如果审阅者要求更改,请重复步骤 5 和 6,为你的拉取请求添加更多提交。

快乐编码!


via: https://opensource.com/article/19/7/create-pull-request-github

作者:Kedar Vijay Kulkarni 选题:lujun9972 译者:furrybear 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

有一种方法可以在没有任何本地基础设施的情况下使用开源数据集探索 GitHub 数据。

我一直在寻找新的数据集,以用它们来展示我们团队工作的力量。CHAOSSEARCH 可以将你的 Amazon S3 对象存储数据转换为完全可搜索的 Elasticsearch 式集群。使用 Elasticsearch API 或 Kibana 等工具,你可以查询你所要找的任何数据。

当我找到 GHTorrent 项目进行探索时,我很兴奋。GHTorrent 旨在通过 GitHub API 构建所有可用数据的离线版本。如果你喜欢数据集,这是一个值得一看的项目,甚至你可以考虑捐赠一个 GitHub API 密钥

访问 GHTorrent 数据

有许多方法可以访问和使用 GHTorrent 的数据,它以 NDJSON 格式提供。这个项目可以以多种形式提供数据,包括用于恢复到 MySQL 数据库的 CSV,可以转储所有对象的 MongoDB,以及用于将数据直接导出到 Google 对象存储中的 Google Big Query(免费)。 有一点需要注意:这个数据集有从 2008 年到 2017 年几乎完整的数据集,但从 2017 年到现在的数据还不完整。这将影响我们确定性查询的能力,但它仍然是一个令人兴奋的信息量。

我选择 Google Big Query 来避免自己运行任何数据库,那么我就可以很快下载包括用户和项目在内的完整数据库。CHAOSSEARCH 可以原生分析 NDJSON 格式,因此在将数据上传到 Amazon S3 之后,我能够在几分钟内对其进行索引。CHAOSSEARCH 平台不要求用户设置索引模式或定义其数据的映射,它可以发现所有字段本身(字符串、整数等)。

随着我的数据完全索引并准备好进行搜索和聚合,我想深入了解看看我们可以发现什么,比如哪些软件语言是 GitHub 项目最受欢迎的。

(关于格式化的说明:下面这是一个有效的 JSON 查询,我们不会在这里正确格式化以避免滚动疲劳。要正确格式化它,你可以在本地复制它并发送到命令行实用程序,如 jq。)

{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}

对于那些近年来跟踪开源语言状态的人来说,这个结果并不令人惊讶。

 title=

JavaScript 仍然是卫冕冠军,虽然有些人认为 JavaScript 正在逐渐消失,但它仍然是 800 磅重的大猩猩,很可能会保持这种状态一段时间。Java 面临类似的谣言,但这些数据表明它是开源生态系统的重要组成部分。

考虑到像 DockerKubernetes 这样的项目的流行,你可能会想,“Go(Golang)怎么样?”这是一个提醒的好时机,这里讨论的 GitHub 数据集包含一些空缺,最明显的是在 2017 年之后我看到 Golang 项目随处可见,而这里并没有显示。我希望用完整的 GitHub 数据集重复此搜索,看看它是否会改变排名。

现在让我们来探讨项目创建的速度。 (提醒:这是为了便于阅读而合并的有效 JSON。)

{"aggs":{"2":{"date_histogram":{"field":"root.created_at","interval":"1M","time_zone":"America/New_York","min_doc_count":1}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["root.created_at","root.updated_at"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"root.language":{"query":""}}}]}}}

我们可以看到创建新项目的速度,也会给人留下深刻的印象,从 2012 年左右开始大幅增长:

 title=

既然我知道了创建项目的速度以及用于创建这些项目的最流行的语言,我还想知道这些项目选择的开源许可证。遗憾的是,这个 GitHub 项目数据集中并不存在这些数据,但是 Tidelift 的精彩团队在 Libraries.io 数据 里发布了一个 GitHub 项目的详细列表,包括使用的许可证以及其中有关开源软件状态的其他详细信息。将此数据集导入 CHAOSSEARCH 只花了几分钟,让我看看哪些开源软件许可证在 GitHub 上最受欢迎:

(提醒:这是为了便于阅读而合并的有效 JSON。)

{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}

结果显示了一些重要的异常值:

 title=

如你所见,MIT 许可证Apache 2.0 许可证 的开源项目远远超过了其他大多数开源许可证,而 各种 BSD 和 GPL 许可证 则差得很远。鉴于 GitHub 的开放模式,我不能说我对这些结果感到惊讶。我猜想是用户(而不是公司)创建了大多数项目,并且他们使用 MIT 许可证可以使其他人轻松地使用、共享和贡献。而鉴于有不少公司希望确保其商标得到尊重并为其业务提供开源组件,那么 Apache 2.0 许可证数量高企的背后也是有道理的。

现在我确定了最受欢迎的许可证,我很想看看最少使用的许可证。通过调整我的上一个查询,我将前 10 名逆转为最后 10 名,并且只找到了两个使用 伊利诺伊大学 - NCSA 开源许可证) 的项目。我之前从未听说过这个许可证,但它与 Apache 2.0 非常接近。看到所有 GitHub 项目中使用了多少个不同的软件许可证,这很有意思。

 title=

之后,我针对特定语言(JavaScript)来查看最常用的许可证。(提醒:这是为了便于阅读而合并的有效JSON。)

{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"JavaScript"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}

这个输出有一些意外。

 title=

尽管使用 npm init 创建的 NPM 模块的默认许可证是来自 Internet Systems Consortium(ISC) 的许可证,但你可以看到相当多的这些项目使用 MIT 以及 Apache 2.0 的开源许可证。

由于 Libraries.io 数据集中包含丰富的开源项目内容,并且由于 GHTorrent 数据缺少最近几年的数据(因此缺少有关 Golang 项目的任何细节),因此我决定运行类似的查询来查看 Golang 项目是如何许可他们的代码的。

(提醒:这是为了便于阅读而合并的有效 JSON。)

{"aggs":{"2":{"terms":{"field":"Repository License","size":10,"order":{"_count":"desc"}}}},"size":0,"_source":{"excludes":[]},"stored_fields":["*"],"script_fields":{},"docvalue_fields":["Created Timestamp","Last synced Timestamp","Latest Release Publish Timestamp","Updated Timestamp"],"query":{"bool":{"must":[{"match_phrase":{"Repository Language":{"query":"Go"}}}],"filter":[{"match_all":{}}],"should":[],"must_not":[{"match_phrase":{"Repository License":{"query":""}}}]}}}

结果与 Javascript 完全不同。

 title=

Golang 项目与 JavaScript 项目惊人逆转 —— 使用 Apache 2.0 的 Golang 项目几乎是 MIT 许可证的三倍。虽然很难准确地解释为什么会出现这种情况,但在过去的几年中,Golang 已经出现了大规模的增长,特别是在开源和商业化的项目和软件产品公司中。

正如我们上面所了解的,这些公司中的许多公司都希望强制执行其商标策略,因此转向 Apache 2.0 许可证是有道理的。

总结

最后,我通过深入了解 GitHub 用户和项目的数据找到了一些有趣的结果。其中一些我肯定会猜到,但是一些结果对我来说也是惊喜,特别是像很少使用的 NCSA 许可证这样的异常值。

总而言之,你可以看到 CHAOSSEARCH 平台能够快速轻松地找到有趣问题的复杂答案。我无需自己运行任何数据库就可以深入研究这个数据集,甚至可以在 Amazon S3 上以低成本的方式存储数据,因此无需维护。 现在,我可以随时查询有关这些数据的任何其他问题。

你对数据提出了哪些其他问题,以及你使用了哪些数据集?请在评论或推特上告诉我 @petecheslock

本文的一个版本最初发布在 CHAOSSEARCH,有更多结果可供发现。


via: https://opensource.com/article/19/5/chaossearch-github-ghtorrent

作者:Pete Cheslock 选题:lujun9972 译者:wxy 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

数百名开发人员的 Git 仓库被黑客删除,取而代之的是赎金要求。攻击于 5 月 3 日开始,包括 GitHub、Bitbucket 和 GitLab在内的代码托管平台都受到了影响。 目前已知的情况是,黑客从受害者的 Git 仓库中删除了所有源代码和最近提交的 Repo,只留下了 0.1 比特币(约 ¥3850)的赎金票据。

黑客声称所有源码都已经下载并存储在他们的一台服务器上,并且给受害者十天时间支付赎金,否则,他们会公开代码。

想要恢复丢失的代码并避免泄露:请将 0.1 比特币(BTC)发送至我们的比特币地址 1ES14c7qLb5CYhLMUekctxLgc1FV2Ti9DA,并将您的 Git 登录信息和付款证明发送至 [email protected]。如果您不确定我们是否有您的数据,请与我们联系,我们将向您发送证明,您的代码已下载并备份在我们的服务器上。如果我们在接下来的 10 天内没有收到付款,我们将公开代码或以其他方式使用。

在 GitHub 上搜索可发现已有 391 个仓库受影响,这些仓库的代码和提交信息均被一个名为 “gitbackup” 的账号删除。

尽管如此,BitcoinAbuse 平台显示,该比特币地址目前还未收到赎金。

一名用户指出 GitHub 在发现攻击后暂停帐户并进行调查:“GitHub 昨晚在他们调查时暂停了我的帐户,希望今天能听到他们的消息,我可能很幸运。”

据 ZDNet 的报道,好消息是,在深入挖掘受害者的案例后,StackExchange 安全论坛的成员发现黑客实际上没有删除,仅仅是改变了 Git 提交标头,这意味着在某些情况下可以恢复代码提交。

最新消息,GitLab 的安全总监 Kathy Wang 告诉 BleepingComputer:

我们根据 Stefan Gabos 昨天提交的赎金票据确定了消息来源,并立即开始调查此问题。我们已确定受影响的用户帐户,并且已通知所有这些用户。根据调查结果,我们有充分证据表明,受损帐户的帐户密码以明文形式存储在相关存储库的部署中。我们强烈建议使用密码管理工具以更安全的方式存储密码,并尽可能启用双因素身份验证,这两种方法都可以防止出现此问题。

目前,平台和用户都在努力解决问题,此处正在持续讨论可能的解决方案。

来源:开源中国

更多资讯

黑客轻松接管 29 个僵尸网络 只因运营者太菜

ZDNet 网站报导,安全专家一次性接管了 29 个僵尸网络,原理十分简单,利用了运营者技术“太菜”的方法。在采访中,安全专家 Subby 介绍了他接管的这 29 个僵尸网络,他指出其实这些僵尸网络都比较小,最初的机器人数量显示总计将近 40000,但在删除重复数据后,实际数量仅为 25000,这样的数据对于一个单独的 IoT 僵尸网络来说都是很小的,更不用说是 29 个的总和了。

来源: 开源中国

详情: http://t.cn/EoPirDH

德国警方查封全球第二大暗网黑市 Wall Street Market

据外媒 Techspot 报道,近日警方已查封全球第二大暗网黑市。德国当局领导的这项努力导致三名嫌疑人被捕,这是近两年调查的结果。警方还没收了超过 55 万欧元现金以及多辆车、电脑,数据存储和“ 6 位数的加密货币比特币和门罗币”。另外两名嫌疑人在美国被捕,被描述为“销售致幻毒品最多的供应商”。

来源: cnBeta.COM
详情: http://t.cn/EoPiF9c

何时能不被黑客鱼肉?D-Link 智能摄像头又出事了

近些年来各家厂商把“智能”摄像头市场做的是风生水起,许多消费者也想靠这些大眼睛来守护一方平安。对普通人来说,这些智能化的摄像头确实相当方便,只需连上网络,你就能在千里之外获取自己需要的画面。不过,在你享受方便之余又很容易掉入陷阱,因为安全漏洞背后藏着的坏人太可怕了。

来源: 雷锋网
详情: http://t.cn/EoP67yZ

Mozilla 曝出大乌龙 证书过期导致全球 Firefox 用户无法使用扩展

今天早上 Mozilla 和全球的 Firefox 用户开了个不大不小的玩笑,许多人一大早起来打开浏览器发现所有的扩展都无法使用,就连手机版也是如此。重装 Firefox 或者重装所有的插件都无济于事,在 Bugzilla 上提交的报告中我们了解到,这是由于 Mozilla 的官方证书没有及时续期所致。

来源: cnBeta.COM
详情: http://t.cn/EoP6b8B

(信息来源于网络,安华金和搜集整理)

Apache 基金会(ASF)正式宣布,该基金会已经将其旗下的 350 多个项目、多达 2 亿行的代码从内部的 Git 基础设施迁移至 GitHub。

作为全球最大的开源基金会,ASF 拥有 730 名个人 ASF 成员 Member 和超过 7000 名的 Apache 代码 提交者 Commiter ,在其 20 年的历史当中,已经通过 300 万个代码提交累计贡献了多达 10 亿行的代码。

Apache 项目最初在 ASF 基础设施中提供了两种版本控制服务:Apache Subversion 和 Git。而多年来,越来越多的项目及其社区希望在 GitHub 上看到他们的源代码。但是由于这些代码在 GitHub 只是只读的镜像,因此在这些代码存储库上只能使用有限的 GitHub 工具。

“2016 年,基金会开始将 GitHub 的代码存储库和工具与我们自己的服务集成在一起。这使得部分选定的项目能够使用 GitHub 的优秀工具,”ASF 基础设施管理员 Greg Stein 说。 “随着时间的推移,我们改进、调试并巩固了这种集成。在 2018 年末,我们要求所有项目从我们内部的 git 服务转移到 GitHub 提供的服务。这种转变会将 GitHub 所有的工具带到我们的项目中,而我们在我们的基础设施上维护一个备用镜像。”

GitHub CEO Nat Friedman 表示:“我们很自豪能让开源社区这么长期的成员转移到 GitHub。……无论是与个人开源维护者和贡献者,还是与一些世界上最大的开源基金会(如 Apache)合作,GitHub 的使命是通过支持开源社区,满足他们的独特需求和帮助开源来成为所有开发人员的家,让项目茁壮成长。”

在 2019 年 2 月,迁移到 GitHub 的工作已经完成,ASF 自己的 git 服务退役。

“我们将继续试验和扩展 GitHub,以根据我们自己的需求和要求为我们的社区提供服务,”Stein 补充道。 “基金会已经开始与 GitHub 管理层密切合作,探索实现这一目标的方法,以及将来可能实现的目标。”

补充:Apache 基金会的项目并未“迁移”至 GitHub,而是做了个双主镜像

经过多位 Apache 基金会的贡献者解释,这则消息存在一定的误读,特此做个澄清。

据 Apache 基金会官方的解释,之前,Apache 基金会“有两个不同的 git 服务:gitbox 和 git-wip-us,后者是自 2010 年以来一直可用的最初的 git 服务”,而通常会在 GitHub 上建立一个只读镜像。

随着 Apache 基金会旗下各个项目表示出对利用 GitHub 基础设施服务的兴趣,从 2016 年中期,Apache 基金会建立了 gitbox,以使项目能够正常使用 GitHub 服务。gitbox 提供的是一种双主镜像的仓库,即使用者可以在 GitHub 上进行提交、处理 PR 和工单等,也可以采用 Apache 内部账户进行相同的操作——而无论在任何一端的操作都是双向同步的。

到了 2018 年,基金会决定将所有使用 git 服务项目都迁移至 gitbox,使之可以利用 GitHub 生态的更多工具,并将 git-wip-us 服务废弃。这个工作已于 2019 年 2 月完成。

所以,现在的状态是:Apache 基金会旗下采用 git 作为版本仓库的项目,都迁移至 gitbox 了。这些项目既可以使用 GitHub 的基础设施和工具,也可以使用 Apache 基金会账户在 gitbox 上进行相同的操作。因此,这就是“通过集成了 GitHub 而扩展了 Apache 基金会的基础设施”(原新闻标题)。

感谢 Apache 基金会的贡献者“吴晟@skywalking”、“刘天栋Ted.开源社”和华为的姜宁提供的信息。