代码之家  ›  专栏  ›  技术社区  ›  geranimo

Git只推一个文件

  •  2
  • geranimo  · 技术社区  · 6 年前

    我们有一个公众回购协议,每个人都会推动。我们有时希望在不拉整个远程文件和推整个合并的本地文件的情况下,拉并推一个文件。我知道一个推一定是一个快进,我们能快进一个文件吗?

    这有可能吗?如果没有,为什么(按设计?)?

    1 回复  |  直到 6 年前
        1
  •  3
  •   torek    6 年前

    首先,你误用了git术语。一 裁判 参考 只是一个名字,例如 refs/heads/master (分行名称的全名) master refs/tags/v1.2 (标签的全名 v1.2 )

    下一步: git push 不推动 文件夹 . 什么 Git推送 发送内容包括:

    • 提交和/或标注标签,以及所有其他需要的对象;
    • 引用更新请求(默认)或命令的序列( --force )

    这取决于 接收服务器 决定是否服从这些要求或命令。更新分支名称的请求的默认值 refs/heads/ 如果并且仅当它是一个快速前进的操作时,名称空间才服从礼貌的请求,并且服从任何命令(任何强制更新)。 文件夹 在这里完全不相关。如果且仅当新提交哈希ID将旧提交哈希ID作为祖先时,分支名称更新是一个快进操作。

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

    git push <remote> <local-name>:<remote-name>
    

    要推多个,只需执行以下操作:

    git push <remote> <l1>:<r1> <l2>:<r2> ... <ln>:<rn>
    

    (在中的冒号后省略名称) Git推送 意味着其他Git应使用与本地Git中使用的名称相同的名称。)

    任何提交附带的文件都是提交快照中的文件。因为你只能推 承诺 (不是文件),无法推送文件。

    (当然,你可以用一些东西 其他 比git发送文件到服务器,并让服务器更新文件。但在这种情况下,根本不需要问关于Git的任何问题!)


    Git维护 D 直接的 循环的 G 承诺的raph或dag(事实上,所有对象,但承诺是这里感兴趣的对象)。推动的结果是对DAG的更改。如果更改是纯粹的添加,则不会丢失任何提交。根据定义,这种更新是 快进 因此允许。如果更改导致某些提交无法从更新的引用访问,则根据定义a 非快速前进 因此,默认情况下,礼貌的请求更新被拒绝。

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

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