gpt4 book ai didi

Git 只推送一个文件

转载 作者:太空狗 更新时间:2023-10-29 14:35:31 26 4
gpt4 key购买 nike

我们有一个公共(public)仓库,每个人都可以推送。有时我们希望 pull 和推送单个文件,而不是 pull 整个远程文件并推送整个 merge 的本地文件。我知道推送必须是快进,我们可以只快进单个文件吗?

这可能吗?如果不是,为什么(故意?)?

最佳答案

首先,您误用了 Git 术语。 refreference 只是一个名称,例如 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 push 中省略冒号后的名称意味着其他 Git 应该使用与您在本地 Git 中使用的名称相同的名称。)

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

(当然,您可以使用 其他 Git 以外的东西将文件发送到服务器,并让服务器就地更新文件。但在这种情况下,无需询问有关完全 Git!)


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

非快进更新是否真的丢失提交取决于这些提交是否可以通过其他外部名称访问。这更难计算——并非不可能,只是通过查看正在更新的一个引用不会立即显而易见。因此,默认要求快进更新的设计原则。

简而言之,Git 真的在做graph theory .

关于Git 只推送一个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51308289/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com