6

我喜欢使用 Git 软件来推送提交,但我使用的那些(Gitbox、Github、SourceTree)在向它们添加新仓库时都要求本地仓库。

问题是,我的仓库在我的开发服务器上,而不是我的本地机器上。

那么 Git 软件可以使用远程 Git 存储库作为开发存储库,然后将其推送到您的主存储库(例如 Github 或 Bitbucket)吗?

否则,您似乎无法使用该软件,而不得不通过 SSH 使用命令行。

谢谢

4

5 回答 5

6

一种不依赖前端来支持直接操作远程仓库的解决方案是将远程挂载为网络文件系统。如果您只能通过 SSH 访问远程机器,您可以尝试通过FUSE(Linux 上)或Mac OS X 上的OSXFUSE使用SSHFS。或者根据您的偏好和设置,您可以使用 SMB、NFS、DAV 或其他网络文件系统.

我在评论中提到的另一种方法是将网络文件系统从您的开发机器导出到您的服务器。我这样做是为了可以一次将我当前的工作副本安装在多台机器上,并且即使我没有连接到服务器,我仍然拥有我的本地工作副本。

你写:

我很惊讶 git 软件无法将远程存储库作为工作版本处理。

大多数 Git GUI 通过调用命令来完成一些工作git。为了让他们支持远程操作,核心 Git 也必须支持。它是用 C 和 shell 脚本混合编写的;所有这些都必须重写以处理远程文件。

文本编辑器的工作要容易得多;它在您打开文件时读取一个文件,并在您保存时写入,而 Git 在单个操作过程中读取和写入许多文件,例如commit.

网络文件系统意味着所有工具(Git 和其他)都可以处理您的远程文件。不是在每个应用程序中构建一个层来支持网络文件访问,而是在内核中(或通过 FUSE)进行,然后将其视为本地文件系统,即可免费为每个应用程序提供支持。

于 2012-10-16T19:36:46.570 回答
2

请记住,Git 是一个DVCS。您不连接到远程服务器来提交内容的事实是设计使然

您想要做的是让本地 Git 存储库将代码推送到您的集成服务器(实际运行代码的服务器)。这就像部署一样,只是您部署到测试服务器而不是生产服务器。

这通常是通过拥有一个您推送到的共享 Git 存储库来实现的。这个回购应该是裸露的。除了裸共享存储库之外,您还需要共享 Git 存储库的非裸克隆,它将用作您的 Apache docroot。

当共享 repo 收到提交时,它将使 docroot repo 执行git pull

这可以通过在共享 repo 上使用post-receive 挂钩来实现。

docroot repo 在特定分支上签出(比如说develop)。因此,即使您将内容提交到其他分支并推送它们,服务器也不会受到影响。

这允许您设置多个部署存储库,因此您可以拥有另一个prod与其中一个相关联的分支,当您将内容推送到它时,这些分支实际上会更新生产代码。

它还允许您将未完成/正在进行的工作存储在根本不部署的共享分支上,这样您就知道您一直在笔记本电脑上工作的东西在共享存储库中是安全的,即使它可以不要被发送到测试服务器,因为它不完整并且会破坏测试服务器,使其他人无法工作或其他东西。

本文详细介绍了如何设置所有这些。我以前做过,效果很好。

于 2013-07-11T18:47:17.390 回答
0

我为自己找到了一个简单的方法:在传输(FTP 客户端)中,有一个“将收藏夹安装为磁盘”的选项。SourceTree 可以使用这个“虚拟”磁盘按预期工作。

但是有一个限制:只有在对代码进行了所有更改并准备好提交/推送之后,您才能挂载磁盘并启动 SourceTree,如果在处理代码时保持 SourceTree 和 ssh 磁盘挂载,它将无法工作。由于某种原因,Transmit 挂载的磁盘不会实时更新文件内容,而只会在卸载/挂载操作之后更新。

于 2013-06-20T18:49:34.893 回答
0

大约一年前我遇到了这个确切的问题 - 不幸的是,我找不到任何一致、可靠的答案。我用谷歌搜索了几个星期,认为是我的搜索词没有成功——尝试了各种方式。

[我们的设置是每个开发人员都有自己的开发服务器-将它们与机器分开意味着可以在任何地方开发站点,可以将开发服务器设置为与实际环境完全相同,并且系统管理员可以对其进行升级和备份 - 我完全看到了在工作机器上拥有单独的开发服务器的优势,少数缺点之一是没有 git 应用程序!]

依赖文件挂载或欺骗您的计算机认为远程驱动器是本地的一切都适用于一般文件浏览,但当连接断断续续时,Git 应用程序往往会崩溃。其他时候你必须以某种方式做事,只是为了看到一个git status

我知道这不是您想听到的答案,就像我前段时间遇到的情况一样,并且确切地知道您的感受,但是您能做的最好的事情就是在命令行上使用 git

我讨厌成为那些命令行更好的Stack Overflow 回答者之一,但在这种情况下,我找不到任何可以被多个开发人员每天整天使用的东西。

我当时也反对它,我更喜欢更漂亮、更易于使用的 UI,但自从学习了命令行和 git 后,我​​再也没有回头。在家里开始我自己的项目时,我发现自己在任何应用程序上都使用终端,因为我发现其中许多应用程序令人困惑!

它不仅有助于增强您对命令行的信心,而且自从使用终端以来,我的 Git 知识提高了十倍,因为这些应用程序经常隐藏很多发生的事情。

于 2014-07-28T08:50:15.663 回答
0

7 年后,Git 的目标是能够通过VFS for Git使用虚拟磁盘。

Git 虚拟文件系统(以前称为 GVFS)是一个开源系统,它使 Git 能够在企业规模上运行。
它使使用和管理大量 Git 存储库成为可能。

VFS for Git 将您的 Git 存储库下的文件系统虚拟化,以便 Git 工具可以看到看似正常的存储库,而实际上这些文件实际上并不存在于磁盘上。
VFS for Git 仅在需要时下载文件。

这(还)不是 Git 本身的一部分,但是:

为此,Git 2.22(2019 年第二季度)将通过引入一个新的钩子 " post-index-change"来帮助管理这样的虚拟磁盘,当磁盘索引文件更改时将调用该钩子:这有助于例如虚拟化工作树的实现。

请参阅Ben Peart ( ) 的提交 1956ecd(2019 年 2 月 15 日(由Junio C Hamano 合并 -- --提交 5795a75中,2019 年 4 月 25 日)benpeart
gitster

read-cache: 添加post-index-change钩子

添加一个post-index-change在索引写入后调用的钩子 do_write_locked_index()

这个钩子主要用于通知,不会影响触发索引写入的 git 命令的结果。

钩子被传递一个标志以指示工作目录是否已更新,以及一个指示skip-worktree位是否可能已更改的标志。
这些标志使钩子能够优化其对索引更改通知的响应。

于 2019-04-25T20:36:48.177 回答