【问题标题】:Can Git software (e.g. Gitbox, Github, SourceTree) use a remote repo instead of local?Git 软件(例如 Gitbox、Github、SourceTree)可以使用远程仓库而不是本地仓库吗?
【发布时间】:2012-10-06 23:09:05
【问题描述】:

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

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

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

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

谢谢

【问题讨论】:

  • 本地机器上的文件是否需要编辑?如果文件不在本地计算机上,您将如何开发?你能在远程机器上运行一个 Git GUI 并使用“ssh -X”将它隧道到你的本地机器吗?
  • 我使用了一个通过 SFTP(Coda for Mac)编辑文件的编辑器。所以我不需要或不想要我的本地机器上的文件。我使用几台机器进行开发,所以不想在所有机器上设置 MySQL/apache/php,并为我的项目在每台机器上设置一个 repo,这是一场噩梦。所以我有一台开发机器可以访问所有其他机器。我很惊讶 git 软件无法将远程存储库作为工作版本处理。我不知道在远程运行 git GUI,我对此表示怀疑,我没有运行 x 或类似的东西,它只是一个 centos 网络服务器。

标签: git github bitbucket atlassian-sourcetree gitbox


【解决方案1】:

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

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

你写:

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

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

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

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

【讨论】:

  • 如果 git 软件无法处理我的开发版本的远程存储库,那么这听起来是一个不错的选择,将远程添加为网络驱动器。会调查的。谢谢。
  • @LaurenceCope 我猜大多数 Git 前端都无法远程操作,但我对它们中的大多数都没有经验。实际上,我倾向于反其道而行之。将本地磁盘上的开发目录导出到我正在测试的服务器。我碰巧将 SMB 用于此目的,因为我已经出于其他原因使用它,但是任何网络文件系统都应该可以工作。
  • 更新:当远程安装在 sshfs 驱动器上时,GitHub 和 Gitbox 似乎无法“看到” .git 文件。我没有得到任何状态,或者根本没有关于 repo 的任何信息 :(。不过我可以在 Finder 中看到 .git 文件。
  • 有没有人能够以这种方式实际使用 git?
  • "...为了支持远程操作,核心 Git 也必须支持。"这根本不是真的。 Git 可以安装在远程机器上,软件可以简单地 ssh 到它,执行它需要的任何 git 命令,然后在本地更新 UI。我很惊讶这个工具不存在。
【解决方案2】:

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

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

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

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

这可以通过在共享存储库上使用post-receive hooks 来实现。

docroot 存储库在特定分支上签出(比如说develop)。所以即使你将东西提交到其他分支并推送它们,服务器也不会受到影响。

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

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

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

【讨论】:

  • 问题是我们使用多台本地机器进行开发。无论是我自己的 Mac 或笔记本电脑,还是我的开发人员 PC 和笔记本电脑或家庭等。我们不希望必须在所有这些上设置 Web 服务器以进行本地开发。因此,我们都可以访问删除 DEV 服务器进行工作。这意味着我们可以随时随地开发我们的系统,而不必担心我们正在开发的机器设置。我们只需要本地机器上的 IDE。我们通过 SFTP 连接并以这种方式工作。在我看来,在我们使用的每台机器上设置我们所有的开发站点在这个云时代正在倒退。
  • 在我描述的配置中,您不需要本地服务器。您将拥有一个共享服务器,但不是通过 SFTP 编辑其中的文件,而是提交和推送。共享的 Git 存储库将负责将文件移动到共享的 Web 服务器。
【解决方案3】:

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

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

【讨论】:

  • 我已经在我的桌面上安装了 Transmit.app 来尝试一下!我会试一试。谢谢。
【解决方案4】:

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

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

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

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

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

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

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

【讨论】:

  • 我确实喜欢在终端中使用 git 命令,但在控制台中检查 log/commit/diff 在可视化工具中要好得多(Git Extensions,Beyond Compare)
【解决方案5】:

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

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

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

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

为此,Git 2.22(2019 年第 2 季度)将通过引入 新挂钩“post-index-change 来帮助管理此类虚拟磁盘,该挂钩将在磁盘索引文件更改时调用:这可以帮助例如一个虚拟化的工作树实现。

参见Ben Peart (benpeart)commit 1956ecd(2019 年 2 月 15 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit 5795a75,2019 年 4 月 25 日)

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

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

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

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

【讨论】:

    猜你喜欢
    • 2018-12-05
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 2017-04-15
    • 2019-06-22
    • 2017-08-17
    • 2018-02-06
    • 2021-11-14
    相关资源
    最近更新 更多