确定 git 提交来自哪台计算机

Determine which computer a git commit came from

最近我一直在探索广阔而可怕的知识 属性 法律世界,人们似乎认为,如果你用你的时间、用你的设备创造一些东西(软件),它通常属于你.我知道这有很多例外情况,还有一些关于这个主题的非常好的和信息丰富的帖子。但现在我主要只是好奇违反此协议的人可以被证明有罪的方式。

我的问题是,是否可以 link 将特定的 git 提交到提交它的计算机?怎么样?

当您通过 HTTP、HTTPS 或 SSH 推送到 Git 存储库时,远程服务器通常会创建连接发生时间和连接来源 IP 地址的日志。但是,大多数公司都采用 NAT,导致网络上的多台计算机共享相同的 public IP 地址。

一些示例日志:

# SSH
Feb  8 01:08:37 git-server sshd[12619]: Accepted publickey for git from 192.168.1.100 port 63012 ssh2: RSA SHA256:XxXxxXxxXXXxXX
Feb  8 01:08:37 git-server sshd[12619]: pam_unix(sshd:session): session opened for user git by (uid=0)

# Apache HTTP(s)
192.168.1.100 - - [8/Feb/2016:22:03:18 +0000] "GET /repos/info/refs HTTP/1.1" 200 153

此外,Git 是去中心化的,因此实际推送提交的计算机不一定是提交的作者。

提交通常与某种名称或用户名以及电子邮件地址相关联;但是,这可以在提交时更改,而无需创建之前和现在的记录。

这很简单:

$ git config user.name "John Doe"
$ git config user.email johndoe@example.com
$ git commit
$ git config user.name "Jane Otheruser"
$ git config user.email janeotheruser@example.com

所以,简而言之,有一些启发式方法可以指出提交的作者和来源,但这绝对不是绝对的。 Git 本身不记录有关编写提交的计算机的唯一标识信息。

像 Subversion 这样的版本控制系统,其中所有的提交都被立即推送到一个中央存储库,更容易链接到 Public IP,但仍然没有链接到个人计算机或用户。

is it possible to link a specific git commit to the computer it was committed with?

如果您可以访问可能的机器,但有一些注意事项,是的。

在正常情况下,创建提交的机器可能有一个独特的reflog条目,没有其他机器会有。例如,如果提交 ID 是 8fbfdbf750,那么最多一台机器会有类似这样的条目:

8fbfdbf750 (HEAD -> user/ttt/add-cool-thing-1) HEAD@{15}: commit: Add cool thing 1

其他机器肯定有可能在它们的 reflog 某处列出了提交 ID ,但它不会包含相同的字符串“commit:”。

也就是说,您可能不应该将此方法用于合法目的,因为有一些非常重要的警告:

  1. 相关的 reflog 条目可能已被清除。 (默认为 90 天,但可以更快地清除它们,甚至可以根据需要清除特定日志。)缺少 reflog 条目并不能确认提交不是在机器上创建的。
  2. 有人可能会故意篡改他们控制的机器上的 reflog。例如,在另一台机器上 re-create 相同的提交 ID(通过 re-using 相同的状态、父提交、作者和日期)非常简单,其唯一目的是 re-creating相同的提交和后续的 reflog 条目。
  3. 如果有人将整个 .git 目录从一台机器复制到另一台机器,reflog 将随之而来。

但是,在一般意义上,如果您只是想回答“我是从哪里提交的?”这个问题,如果提交时间足够近并且您没有理由假设任何机器的reflogs被篡改了,这个方法可能有效。