未验证 提交 722216a9 编写于 作者: M Mr.Huang 提交者: GitHub

Update 23.md

上级 9750bc05
......@@ -107,7 +107,7 @@ git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run]
--porcelain
```
生成机器可读输出。每个引用的输出状态行将以制表符分隔并发送到stdout而不是stderr。将给出参考的完整符号名称。
生成机器可读输出。每个引用的输出状态行将以制表符的形式分隔并发送到stdout而不是stderr。我们将给出参考的完整符号名称。
```
-d
......@@ -117,7 +117,7 @@ git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run]
--delete
```
所有列出的引用都将从远程存储库中删除。这与使用冒号为所有引号添加前缀相同。
所有列出的引用都将从远程存储库中删除。这与使用冒号为所有引号添加前缀相同。
```
--tags
......@@ -129,7 +129,7 @@ git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run]
--follow-tags
```
推送没有此选项推送的所有引用,并且还在`refs/tags`中推送远程数据库中缺少的注释标记,但是指向可以从被推送的引用中访问的commit-ish。也可以使用配置变量`push.followTags`指定。有关更多信息,请参阅 [git-config [1]](https://git-scm.com/docs/git-config) 中的`push.followTags`。
推送没有此选项的将要被推送的所有引用,并且还在`refs/tags`中推送远程数据库中缺少的注释标记,但是指向可以从被推送的引用中访问的commit-ish。也可以使用配置变量`push.followTags`指定。有关更多信息,请参阅 [git-config [1]](https://git-scm.com/docs/git-config) 中的`push.followTags`。
```
--[no-]signed
......@@ -139,7 +139,7 @@ git push [--all | --mirror | --tags] [--follow-tags] [--atomic] [-n | --dry-run]
--signed=(true|false|if-asked)
```
GPG签署推送请求以更新接收方的refs,以允许钩子检查和/或记录。如果`false`或`--no-signed`,则不会尝试签名。如果`true`或`--signed`,如果服务器不支持签名推送,则推送将失败。如果设置为`if-asked`,则当且仅当服务器支持签名推送时才签名。如果对`gpg --sign`的实际调用失败,推送也将失败。有关接收端的详细信息,请参阅 [git-receive-pack [1]](https://git-scm.com/docs/git-receive-pack) 。
GPG签署推送请求以更新接收方的refs,以允许钩子检查和/或记录。如果记录为`false`或`--no-signed`,则不会尝试签名。如果为`true`或`--signed`,如果服务器不支持签名推送,则推送将失败。如果设置为`if-asked`,则当且仅当服务器支持签名推送时才签名。如果对`gpg --sign`的实际调用失败,推送也将失败。有关接收端的详细信息,请参阅 [git-receive-pack [1]](https://git-scm.com/docs/git-receive-pack) 。
```
--[no-]atomic
......@@ -181,25 +181,25 @@ GPG签署推送请求以更新接收方的refs,以允许钩子检查和/或记
通常,“git push”拒绝更新远程ref,该远程ref不是用于覆盖它的本地ref的祖先。
如果远程ref的当前值是预期值,则此选项将覆盖此限制。 “git push”否则失败。
如果远程ref的当前值是预期值,则此选项将覆盖此限制。 否则“git push”会失败。
想象一下,你必须改变你已发表的内容。您必须绕过“必须快进”规则才能将最初发布的历史记录替换为重新定位的历史记录。如果其他人在您重新定位时建立在您的原始历史之上,那么远程分支的提示可能会随着她的提交而提前,并且盲目推动`--force`将失去她的工作。
此选项允许您说您希望更新的历史记录是您重新定义并想要替换的内容。如果远程引用仍然指向您指定的提交,您可以确定没有其他人对引用做任何事情。这就像在ref上接受“租约”而没有明确地锁定它,并且仅当“lease”仍然有效时才更新远程ref。
此选项允许您说您希望更新的历史记录是您重新定义并想要替换的内容。如果远程引用仍然指向您指定的提交,您可以确定没有其他人对引用做过任何事情。这就像在ref上接受“租约”而没有明确地锁定它,并且仅当“lease”仍然有效时才会更新远程ref。
单独`--force-with-lease`,没有指定细节,将通过要求它们的当前值与我们为它们提供的远程跟踪分支相同来保护将要更新的所有远程ref。
`--force-with-lease=<refname>`,未指定期望值,将保护命名ref(单独),如果要更新,则要求其当前值与我们为其设置的远程跟踪分支相同。
`--force-with-lease=<refname>:<expect>`将保护命名ref(单独),如果它将要更新,通过要求其当前值与指定值`<expect>`相同(允许它与远程跟踪分支不同我们对于refname,或者在使用此表单时我们甚至不必拥有这样的远程跟踪分支)。如果`<expect>`是空字符串,则指定的ref必须不存在。
`--force-with-lease=<refname>:<expect>`将保护命名ref(单独),如果它将要更新,通过要求其当前值与指定值`<expect>`相同(允许它与远程跟踪分支不同于我们的refname,或者在使用此表单时我们甚至不必拥有这样的远程跟踪分支)。如果`<expect>`是空字符串,则指定的命名ref必须不存在。
请注意,除了`--force-with-lease=<refname>:<expect>`之外的所有明确指定ref的当前值的表单仍然是实验性的,并且随着我们获得此功能的经验,它们的语义可能会发生变化。
请注意,除了`--force-with-lease=<refname>:<expect>`之外的所有明确指定ref的当前值的表单仍然是实验性的,并且随着我们获得与此功能相关的经验,它们的语义可能会发生变化。
“--no-force-with-lease”将在命令行中取消之前的所有--force-with-lease。
关于安全性的一般注意事项:提供没有预期值的该选项,即`--force-with-lease`或`--force-with-lease=<refname>`与在遥控器上隐式运行`git fetch`以在后台推送的任何东西非常相互作用,例如,您在Cronjob中的存储库中的`git fetch origin`。
它提供的保护优于`--force`,确保您的工作所依据的后续更改不会被破坏,但如果某些后台进程在后台更新引用,则这很容易被忽略。除了远程跟踪信息之外,我们没有任何其他内容作为您希望看到的参考资料的启发式信息。愿意破坏。
它提供的保护优于`--force`,确保您的工作所依据的后续更改不会被破坏,但如果某些后台进程在后台更新引用,则这很容易被忽略。除了远程跟踪信息之外,我们没有任何其他内容作为您希望看到的能作为参考资料的启发式信息。有可能导致破坏。
如果您的编辑器或其他系统在后台运行`git fetch`,那么缓解这种情况的方法就是简单地设置另一个远程:
......@@ -214,7 +214,7 @@ git fetch origin-push
git push --force-with-lease origin-push
```
除非您手动运行`git fetch origin-push`,否则将失败。这种方法当然完全被运行`git fetch --all`的东西所击败,在这种情况下你需要禁用它或做一些更乏味的事情,如:
除非您手动运行`git fetch origin-push`,否则将失败。这种方法当然完全被运行`git fetch --all`的东西所击败,在这种情况下你需要禁用它或做一些更乏味的事情,如:
```
git fetch # update 'master' from remote
......@@ -223,7 +223,7 @@ git rebase -i master # rewrite some commits
git push --force-with-lease=master:base master:master
```
即为您已经看到并愿意覆盖的上游代码版本创建`base`标记,然后重写历史记录,如果远程版本仍在`base`,最后强制推送更改为`master`,无论是什么您的本地`remotes/origin/master`已在后台更新。
即为您已经看到并愿意覆盖的上游代码版本创建`base`标记,然后重写历史记录,如果远程版本仍在`base`,最后强制推送更改为`master`,无论是什么您的本地`remotes/origin/master`已在后台更新。
```
-f
......@@ -285,7 +285,7 @@ git push --force-with-lease=master:base master:master
--progress
```
除非指定了-q,否则在将标准错误流附加到终端时,默认情况下会报告进度状态。即使标准错误流未定向到终端,此标志也会强制进度状态。
除非-q已被指定,否则在将标准错误流附加到终端时,默认情况下会报告进度状态。即使标准错误流未定向到终端,此标志也会强制进度状态。
```
--no-recurse-submodules
......@@ -295,7 +295,7 @@ git push --force-with-lease=master:base master:master
--recurse-submodules=check|on-demand|only|no
```
可用于确保要推送的修订使用的所有子模块提交在远程跟踪分支上可用。如果使用_检查_,Git将验证在子模块的至少一个远程处可用的所有要推送的修订中更改的子模块提交。如果缺少任何提交,则将中止推送并以非零状态退出。如果使用_按需_,则将推送在要推送的修订中更改的所有子模块。如果按需无法推送所有必要的修订,它也将被中止并退出非零状态。如果仅使用,则在超级项目未被按下时递归推送所有子模块。当不需要子模块递归时, _no_ 或使用`--no-recurse-submodules`的值可用于覆盖push.recurseSubmodules配置变量。
可用于确保要推送的修订使用的所有子模块提交在远程跟踪分支上可用。如果使用_检查_,Git将验证在子模块的至少一个远程处可用的所有要推送的修订中更改的子模块提交。如果缺少任何提交,则将中止推送并以非零状态退出。如果使用_按需_,则将推送在要推送的修订中更改的所有子模块。如果按需无法推送所有必要的修订,它也将被中止并退出非零状态。如果仅使用,则在超级项目未被按下时递归推送所有子模块。当不需要子模块递归时, _no_ 或`--no-recurse-submodules`的值可用于覆盖push.recurseSubmodules配置变量。
```
--[no-]verify
......@@ -329,7 +329,7 @@ git push --force-with-lease=master:base master:master
Git支持ssh,git,http和https协议(此外,ftp和ftps可用于获取,但这是低效的并且已弃用;请勿使用它)。
本机传输(即git:// URL)不进行身份验证,应在不安全的网络上谨慎使用。
本机传输(即git:// URL)不进行身份验证,在不安全的网络上应当谨慎使用。
可以使用以下语法:
......@@ -492,7 +492,7 @@ push的状态以表格形式输出,每行代表一个ref的状态。每一行
(space)
```
为了成功推进快进;
为了成功快进推送;
```
+
......@@ -570,7 +570,7 @@ Git根本没有尝试发送引用,通常是因为它不是快进而你没有
## 关于快速前进的说明
当更新更改一个分支(或更多,一般来说,一个ref),它曾经指向提交A指向另一个提交B时,当且仅当B是A的后代时,它才被称为快进更新。
当更新更改一个分支(或更多,一般来说,一个ref),它曾经指向提交A,当指向另一个提交B时,当且仅当B是A的后代时,它才被称为快进更新。
在从A到B的快速更新中,原始提交A构建在其上的提交集是新提交B构建在其上的提交的子集。因此,它不会失去任何历史。
......@@ -586,7 +586,7 @@ Git根本没有尝试发送引用,通常是因为它不是快进而你没有
由另一个人完成的推送更新了用于指向提交X的分支以指向提交A.这是一个快进。
但是如果你试图推,你将尝试用提交B更新分支(现在指向A)。这样做_而不是_快进。如果你这样做,提交A引入的更改将会丢失,因为每个人现在都将开始在B之上构建。
但是如果你试图推,你将尝试用提交B更新分支(现在指向A)。这样做_而不是_快进。如果你这样做,提交A引入的更改将会丢失,因为每个人现在都将开始在B之上构建。
默认情况下,该命令不允许更新不是快进以防止此类历史记录丢失。
......@@ -708,7 +708,7 @@ Git根本没有尝试发送引用,通常是因为它不是快进而你没有
已知的攻击向量如下:
1. 受害者发送“”行,宣传其拥有的对象的ID,这些对象并未明确地用于共享,但如果对等方也拥有它们,则可用于优化转移。攻击者选择一个对象ID X来窃取并向X发送一个ref,但不需要发送X的内容,因为受害者已经拥有它。现在,受害者认为攻击者拥有X,并且稍后会将X的内容发送回攻击者。 (这种攻击对于客户端在服务器上执行是最直接的,通过在客户端有权访问的命名空间中创建ref,然后获取它。服务器在客户端上执行它的最可能方式是“将“X”合并到一个公共分支中,并希望用户在此分支上执行其他工作,并将其推送回服务器,而不会注意到合并。)
1. 受害者发送“have”行,宣传其拥有的对象的ID,这些对象并未明确地用于共享,但如果对等方也拥有它们,则可用于优化转移。攻击者选择一个对象ID X来窃取并向X发送一个ref,但不需要发送X的内容,因为受害者已经拥有它。现在,受害者认为攻击者拥有X,并且稍后会将X的内容发送回攻击者。 (这种攻击对于客户端在服务器上执行是最直接的,通过在客户端有权访问的命名空间中创建ref,然后获取它。服务器在客户端上执行它的最可能方式是“将“X”合并到一个公共分支中,并希望用户在此分支上执行其他工作,并将其推送回服务器,而不会注意到合并。)
2. 与#1一样,攻击者选择一个对象ID X来窃取。受害者发送攻击者已经拥有的对象Y,并且攻击者错误地声称拥有X而不是Y,因此受害者将Y作为针对X的增量发送。该增量显示X的区域与攻击者的Y类似。
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册