Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git只推送一个文件_Git_Push - Fatal编程技术网

Git只推送一个文件

Git只推送一个文件,git,push,Git,Push,我们有一个人人都推动的公开回购协议。我们有时希望拉入并推送单个文件,而不拉入整个远程文件和推送整个合并的本地文件。我知道推送必须是快进的,我们可以快进一个文件吗 这可能吗?如果不是,为什么(设计?)首先,您误用了Git术语。ref或reference只是一个名称,例如refs/heads/master(分支名称的全名master)或refs/tags/v1.2(标签的全名v1.2) 下一步:git push不推送文件。git push所发送的内容是: 提交和/或带注释的标记,以及所需的所有其他

我们有一个人人都推动的公开回购协议。我们有时希望拉入并推送单个文件,而不拉入整个远程文件和推送整个合并的本地文件。我知道推送必须是快进的,我们可以快进一个文件吗


这可能吗?如果不是,为什么(设计?)

首先,您误用了Git术语。ref或reference只是一个名称,例如
refs/heads/master
(分支名称的全名
master
)或
refs/tags/v1.2
(标签的全名
v1.2

下一步:
git push
不推送文件。git push所发送的内容是:

  • 提交和/或带注释的标记,以及所需的所有其他对象
  • 一系列参考更新请求(默认)或命令(
    --force
由接收服务器决定是否遵守这些请求或命令。更新分支名称的请求(在
refs/heads/
名称空间中的引用)的默认情况是,当且仅当请求是快进操作时,遵守礼貌请求,并遵守任何命令(任何强制更新)。文件在这里是完全无关的。当且仅当新提交哈希ID将旧提交哈希ID作为祖先时,分支名称更新才是快进操作。1

要推送单个引用,只需执行以下操作:

git push <remote> <local-name>:<remote-name>
git push <remote> <l1>:<r1> <l2>:<r2> ... <ln>:<rn>
git推送:
要推送多个,只需执行以下操作:

git push <remote> <local-name>:<remote-name>
git push <remote> <l1>:<r1> <l2>:<r2> ... <ln>:<rn>
git推送:::
(在
git push
中省略冒号后的名称意味着另一个git应该使用与您在本地git中使用的名称相同的名称。)

任何提交附带的文件都是提交快照中的文件。由于只能推送提交(而不是文件),因此无法推送文件

(当然,您可以使用Git以外的其他工具将文件发送到服务器,并让服务器更新文件。但在这种情况下,根本不需要询问Git!)


1Git维护一个D定向a循环G提交图或DAG(事实上所有对象,但提交是此处关注的对象)。推送的结果是更改DAG。如果更改是纯加法,则不会丢失任何提交。根据定义,这种更新是快进的,因此是允许的。如果更改导致某些提交无法从更新的引用访问,则根据定义,更改是非快进的,因此默认情况下拒绝礼貌请求更新

非快进更新是否确实丢失提交取决于这些提交是否可以通过其他外部名称访问。这是很难计算的,不是不可能的,只是通过查看正在更新的一个引用,这不是很明显。因此,默认情况下需要快进更新的设计原则

简言之,Git确实在做