大多数Git GUI通过调用git命令来完成一些工作。为了支持远程操作,核心Git也必须这样做。它是用C和shell脚本混合编写的;所有这些都必须被重写以应对远程文件。 文本编辑器的工作要容易得多;当您打开它时,它只读取一个文件,并在保存时进行写入,而Git在执行单个操作(如提交)的过程中读取并写入许多文件。 网络文件系统意味着所有工具(包括Git在内)都可以处理您的远程文件。不是在每个应用程序中构建支持网络文件访问的层,而是在内核(或通过FUSE)中进行,然后将其视为本地文件系统,可以免费获得所有应用程序的支持。我很惊讶git软件不能处理远程仓库作为工作版本。
git pull
。
可以使用共享仓库上的post-receive hooks来实现。
文档根仓库在特定的分支(比如develop
)上进行检出。因此,即使你提交了其他分支的内容并将它们推送,服务器也不会受影响。
这使你可以设置多个部署仓库,因此你可以有另一个与其相关的prod
分支,当你向其中推送内容时,它将实际更新生产代码。
它还允许你在共享分支上存储不完整/正在进行的工作,这些工作不会被部署,以便你知道你在笔记本电脑上工作的东西安全地保存在共享仓库中,即使它不能发送到测试服务器,因为它不完整并且会破坏测试服务器,使其他人无法工作或者造成其他问题。
这篇文章详细介绍了如何设置所有内容。我以前做过,效果很好。
经过7年,Git的目标是能够通过 VFS for Git 使用虚拟磁盘。
Git的Virtual Filesystem (曾用名GVFS)是一种开源系统,使得Git可以在企业级规模下操作。它使得使用和管理海量的Git仓库成为可能。
VFS for Git将您的Git仓库下面的文件系统虚拟化,因此当Git工具看到一个正常的仓库时,实际上这些文件并不会真正存在于磁盘中。VFS for Git只在需要时下载文件。
这还不是Git本身的一部分,但:
对于这个问题,在Git 2.22(2019年第二季度)中将引入一个 新的钩子“post-index-change” 来帮助管理这样的虚拟磁盘,当磁盘上的索引文件发生变化时会调用该钩子:这可以帮助实现虚拟化的工作树。
请查看 1956ecd 提交记录(2019年2月15日),提交者为 Ben Peart (benpeart
)。
(合并于 5795a75 提交记录,合并者为 Junio C Hamano -- gitster
--,日期为2019年4月25日)
read-cache
:添加post-index-change
钩子添加一个post-index-change
钩子,该钩子在do_write_locked_index()
中写入索引后被调用。
此钩子主要用于通知,并且不能影响触发索引写入的git命令的结果。
传递给钩子一个标志以指示工作目录是否已更新,以及指示skip-worktree
位是否可能已更改的标志。
这些标志使钩子能够优化其对索引更改通知的响应。
我大约一年前遇到了这个确切的问题 - 不幸的是,我找不到任何一致可靠的答案。我谷歌了几周,认为是我的搜索词没有成功 - 尝试了各种方式。
[我们的设置是每个开发人员都有自己的开发服务器 - 将它们与机器分开意味着可以在任何地方开发网站,开发服务器可以设置为与实时环境完全相同,并且系统管理员可以将它们升级和备份 - 我完全看到了拥有单独的开发服务器与工作机器相比的优势,其中少数缺点之一是没有 Git 应用程序!]
所有依赖文件挂载或欺骗计算机以认为远程驱动器是本地的东西都适用于一般文件浏览,但是当连接不稳定时,Git 应用程序往往会出现故障。其他时候,您必须按照某种特定的方式进行操作,才能看到 git status
我知道这不是你想听到的答案,因为我曾经处于你的情况,并且非常了解你的感受,但是你能做的最好的事情就是在命令行上使用 git。
我讨厌成为那些“命令行更好”的Stack Overflow回答者之一,但在这种情况下,我找不到任何一个能够满足标准,被多个开发者每天都使用的。
当时我也反对这种做法,我更喜欢漂亮、易于使用的用户界面,但自从学习了命令行和git之后,我就再也没有回头过。在家开始我的项目时,我发现自己更喜欢使用终端而非应用程序,因为我觉得很多应用程序令人困惑!
它不仅有助于你的命令行信心,而且自从使用终端以来,我的Git知识提高了十倍,因为应用程序经常隐藏了很多事情的发生。