git commit --author 不需要密码?
git commit --author does not require password?
我的情况如下:有 2 个人可以访问私人仓库并一起编写代码。但是一个人在另一个人的电脑上写了一段代码,现在想为他的名字而不是另一个人的名字提交。
我已经看到 here 如何为存储库的另一位作者提交。我已经这样做了,但奇怪的是它不需要我提交的作者的密码。这是不正常的。所以人们可以为我自己提交一个我没有写过而且我不负责的代码?
是的。使用 git 你可以在任何你想要的个性下做出承诺。但是你可以使用 gpg-sign 来保证这个提交在未来是你的:
1. 创建密钥:
~$ gpg --gen-key
2. 添加到您要使用的 .gitconfig 键:
[user]
....
signingkey = E4634C2C
3. 进行签名提交:
~$ git commit -s -m "Signed commit"
但也有一些缺点:
- 提交前需要输入pass。
- 您需要当前本地主机上的秘密 gpg 密钥。
Git不处理任何授权。它的工作方式是,您可以使用 git config
或 --author
参数更改您的身份,以根据需要进行提交。这些提交将保留在您的计算机本地,直到您决定推送它们。
远程服务器通常选择进行某种身份验证。这通常是使用 SSH 协议完成的。此外,许多添加了一个授权层来限制您访问存储库。例如,在 GitHub 上,您只能推送到您拥有的或您明确获得写入权限的存储库。
然而,此访问控制仅适用于推送更改的行为。因此,如果您有权访问存储库,则可以向任何作者推送任何您想要的提交。提供者可能会添加一个检查,当它们包含不是由推送用户创作(或提交)的提交时拒绝推送。但是,通常不需要这种行为。
原因是Git是分布式版本控制系统。因此,与 Subversion 不同,人们不必使用相同的集中式服务器,这样可以确保您只发布自己所做的更改(Subversion 实际上只是假设这一点,并且“提交”仅在服务器上创建)。相反,有可能——而且通常需要——提交走不同的路线,直到它们到达中央存储库(多个存储库也很常见)。您甚至可以直接与其他开发人员合作,将更改推送到他们的私有存储库或从中提取更改,而无需与某种中央服务器交互。当您随后决定将提交发布到中央服务器时,当然中央服务器不应该仅仅因为您包含了其他开发人员的提交而拒绝您的更改。
所以不,不能保证其他人不会使用您的“身份”以您的名义创建提交。然而,Git 确实支持签署提交,以允许 you 证明提交是您自己的。任何有兴趣验证它的人都可以检查提交上的签名并验证它是否真的是由你自己制作的。一些存储库服务器甚至可能要求对所有推送到服务器的提交进行签名,然后在每次提交时验证签名。但这完全是可选的,而不是 Git 默认附带的东西;因为默认情况下 Git 只是一个 “stupid content tracker”.
我的情况如下:有 2 个人可以访问私人仓库并一起编写代码。但是一个人在另一个人的电脑上写了一段代码,现在想为他的名字而不是另一个人的名字提交。
我已经看到 here 如何为存储库的另一位作者提交。我已经这样做了,但奇怪的是它不需要我提交的作者的密码。这是不正常的。所以人们可以为我自己提交一个我没有写过而且我不负责的代码?
是的。使用 git 你可以在任何你想要的个性下做出承诺。但是你可以使用 gpg-sign 来保证这个提交在未来是你的:
1. 创建密钥:
~$ gpg --gen-key
2. 添加到您要使用的 .gitconfig 键:
[user]
....
signingkey = E4634C2C
3. 进行签名提交:
~$ git commit -s -m "Signed commit"
但也有一些缺点:
- 提交前需要输入pass。
- 您需要当前本地主机上的秘密 gpg 密钥。
Git不处理任何授权。它的工作方式是,您可以使用 git config
或 --author
参数更改您的身份,以根据需要进行提交。这些提交将保留在您的计算机本地,直到您决定推送它们。
远程服务器通常选择进行某种身份验证。这通常是使用 SSH 协议完成的。此外,许多添加了一个授权层来限制您访问存储库。例如,在 GitHub 上,您只能推送到您拥有的或您明确获得写入权限的存储库。
然而,此访问控制仅适用于推送更改的行为。因此,如果您有权访问存储库,则可以向任何作者推送任何您想要的提交。提供者可能会添加一个检查,当它们包含不是由推送用户创作(或提交)的提交时拒绝推送。但是,通常不需要这种行为。
原因是Git是分布式版本控制系统。因此,与 Subversion 不同,人们不必使用相同的集中式服务器,这样可以确保您只发布自己所做的更改(Subversion 实际上只是假设这一点,并且“提交”仅在服务器上创建)。相反,有可能——而且通常需要——提交走不同的路线,直到它们到达中央存储库(多个存储库也很常见)。您甚至可以直接与其他开发人员合作,将更改推送到他们的私有存储库或从中提取更改,而无需与某种中央服务器交互。当您随后决定将提交发布到中央服务器时,当然中央服务器不应该仅仅因为您包含了其他开发人员的提交而拒绝您的更改。
所以不,不能保证其他人不会使用您的“身份”以您的名义创建提交。然而,Git 确实支持签署提交,以允许 you 证明提交是您自己的。任何有兴趣验证它的人都可以检查提交上的签名并验证它是否真的是由你自己制作的。一些存储库服务器甚至可能要求对所有推送到服务器的提交进行签名,然后在每次提交时验证签名。但这完全是可选的,而不是 Git 默认附带的东西;因为默认情况下 Git 只是一个 “stupid content tracker”.