我喜欢使用Git软件来推送提交,但我使用的软件(Gitbox,Github,SourceTree)在添加新的repo时都要求本地repo。问题是,我的repo在我的开发服务器上,而不是我的本地机器上。那么,Git软件可以使用远程Git仓库作为开发仓库,然后将其推送到您的主仓库(例如Github或Bitbucket)吗?否则,你似乎无法使用该软件,必须通过SSH诉诸命令行。谢谢
2g32fytz1#
7年后,Git的目标是能够通过**VFS for Git使用虚拟磁盘。Git虚拟文件系统(Virtual Filesystem for Git,以前称为GVFS)是一个开源系统,使Git能够在企业级运行。它使使用和管理大规模的Git存储库成为可能。VFS for Git虚拟化了Git仓库下的文件系统,这样Git工具就可以看到看似正常的仓库,而实际上这些文件并不存在于磁盘上。VFS for Git仅在需要时下载文件。这还不是Git本身的一部分,而是:为此,Git 2.22(Q2 2019)将通过引入新钩子“post-index-change“**来帮助管理这样的虚拟磁盘,当磁盘索引文件更改时将调用该钩子:这可以帮助例如虚拟化工作树实现。请参阅commit 1956ecd(2019年2月15日)通过Ben Peart ( benpeart )。(由Junio C Hamano -- gitster --合并于commit 5795a75,2019年4月25日)
post-index-change
benpeart
gitster
read-cache
添加一个post-index-change钩子,在do_write_locked_index()中写入索引后调用。这个钩子主要用于通知,不能影响触发索引写的git命令的结果。钩子被传递一个标志来指示工作目录是否被更新,以及一个标志来指示skip-worktree位是否被改变。这些标志使钩子能够优化其对索引更改通知的响应。
do_write_locked_index()
skip-worktree
bvhaajcl2#
一种不依赖于前端来支持直接操作远程存储库的解决方案是将远程存储库挂载为网络文件系统。(在Linux上)或Mac OS X上的OSXFUSE。或者,根据您的首选项和设置,您可以使用SMB、NFS、DAV或其他网络文件系统。另一种方法是将网络文件系统从开发机器导出到服务器,这样我就可以同时在多台机器上挂载当前的工作副本,即使没有连接到服务器,我也可以保留本地工作副本。你写道:我很惊讶git软件不能像工作版本那样处理远程仓库。大多数Git GUI通过调用git命令来完成一些工作。为了让它们支持远程操作,核心Git也必须支持。它是用C和shell脚本混合编写的;所有这些都必须重写以科普远程文件。文本编辑器的工作要简单得多;它在你打开文件时读取一个文件,在你保存时写入,而Git在一个操作过程中读取和写入许多文件,比如commit。网络文件系统意味着所有的工具(Git和其他工具)都可以在你的远程文件上工作,而不是在每个应用程序中构建一个层来支持网络文件访问,而是在内核中(或通过FUSE)这样做,然后把它当作一个本地文件系统,这样你就可以免费在每个应用程序中支持网络文件访问。
git
commit
5jdjgkvh3#
请记住,Git是一个DVCS。事实上,你不连接到远程服务器来提交东西是 * 通过设计 *。你要做的是让本地Git仓库将代码推送到你的集成服务器(实际运行代码的服务器),这就像部署一样,只是你部署到测试服务器而不是生产服务器。这通常是通过拥有一个共享的Git仓库来实现的。这个仓库should be bare。除了裸共享仓库之外,你还需要一个共享Git仓库的非裸克隆,它将作为你的Apache docroot。当共享仓库收到一个提交时,它会让docroot仓库执行git pull。这可以通过在共享仓库上使用post-receive钩子来实现。docroot存储库是在特定的分支(比如develop)上 checkout 的,所以即使你向其他分支提交东西并推送它们,服务器也不会受到影响。这允许您设置多个部署存储库,因此您可以将另一个分支prod与其中一个关联,当您将内容推送到它时,它将实际更新生产代码。它还允许你将未完成的/正在进行的工作存储在一个根本不部署的共享分支上,这样你就知道你在笔记本电脑上工作的东西在共享存储库上是安全的,即使它不能被发送到测试服务器,因为它不完整,会破坏测试服务器,使其他人无法工作或其他事情。This article详细介绍了如何设置所有这些。我以前做过,它工作得很好。
git pull
develop
prod
tzdcorbm4#
我为自己找到了一个简单的方法:在传输(FTP客户端)中有一个“将收藏夹挂载为磁盘”的选项。SourceTree可以像预期的那样使用这个“虚拟”磁盘。但有一个限制:你可以挂载磁盘并启动SourceTree,只有在你在代码中做了所有的更改并准备好进行提交/推送之后,如果你在处理代码时保持SourceTree和ssh磁盘挂载,它将不起作用。由于某种原因,由Transmit挂载的磁盘不会实时更新文件内容,而是只在卸载/挂载操作之后。
kgsdhlau5#
大约一年前,我就遇到了这个问题--不幸的是,我找不到任何一致的、可靠的答案。我在谷歌上搜索了几个星期,以为是我的搜索词没有成功--试了各种方法。[The我们的设置是每个开发人员都有自己的开发服务器-将它们与机器分开意味着网站可以在任何地方开发,开发服务器可以设置为与实时环境完全相同,并且系统管理员可以保持它们升级和备份-我完全看到了将开发服务器与工作机器分开的优势,少数缺点之一是没有Git应用程序!所有依赖于文件挂载或欺骗您的计算机以为远程驱动器是本地驱动器的方法都可以用于一般文件浏览,但Git应用程序在连接间歇时往往会崩溃。其他时候,您必须以某种方式执行操作,只是为了查看git status我知道这不是你想听到的答案,因为我在你的情况下,一段时间前,知道你的感受,但你能做的最好的事情是 * 在命令行上使用git *。我讨厌成为那些 * 命令行更好 * 堆栈溢出的回答者之一,但在这种情况下,我找不到任何符合标准的东西,供多个开发人员每天使用。我当时也反对它,我更喜欢更漂亮,更容易使用的UI,但自从学习命令行和git,我从来没有回头。当我在家里开始自己的项目时,我发现自己使用终端而不是任何应用程序,因为我发现他们中的许多人令人困惑!它不仅有助于你对命令行的信心,而且自从使用终端以来,我的Git知识已经提高了十倍,因为应用程序经常隐藏很多事情。
git status
5条答案
按热度按时间2g32fytz1#
7年后,Git的目标是能够通过**VFS for Git使用虚拟磁盘。
Git虚拟文件系统(Virtual Filesystem for Git,以前称为GVFS)是一个开源系统,使Git能够在企业级运行。
它使使用和管理大规模的Git存储库成为可能。
VFS for Git虚拟化了Git仓库下的文件系统,这样Git工具就可以看到看似正常的仓库,而实际上这些文件并不存在于磁盘上。
VFS for Git仅在需要时下载文件。
这还不是Git本身的一部分,而是:
为此,Git 2.22(Q2 2019)将通过引入新钩子“
post-index-change
“**来帮助管理这样的虚拟磁盘,当磁盘索引文件更改时将调用该钩子:这可以帮助例如虚拟化工作树实现。请参阅commit 1956ecd(2019年2月15日)通过Ben Peart (
benpeart
)。(由Junio C Hamano --
gitster
--合并于commit 5795a75,2019年4月25日)read-cache
:添加post-index-change
钩子添加一个
post-index-change
钩子,在do_write_locked_index()
中写入索引后调用。这个钩子主要用于通知,不能影响触发索引写的git命令的结果。
钩子被传递一个标志来指示工作目录是否被更新,以及一个标志来指示
skip-worktree
位是否被改变。这些标志使钩子能够优化其对索引更改通知的响应。
bvhaajcl2#
一种不依赖于前端来支持直接操作远程存储库的解决方案是将远程存储库挂载为网络文件系统。(在Linux上)或Mac OS X上的OSXFUSE。或者,根据您的首选项和设置,您可以使用SMB、NFS、DAV或其他网络文件系统。
另一种方法是将网络文件系统从开发机器导出到服务器,这样我就可以同时在多台机器上挂载当前的工作副本,即使没有连接到服务器,我也可以保留本地工作副本。
你写道:
我很惊讶git软件不能像工作版本那样处理远程仓库。
大多数Git GUI通过调用
git
命令来完成一些工作。为了让它们支持远程操作,核心Git也必须支持。它是用C和shell脚本混合编写的;所有这些都必须重写以科普远程文件。文本编辑器的工作要简单得多;它在你打开文件时读取一个文件,在你保存时写入,而Git在一个操作过程中读取和写入许多文件,比如
commit
。网络文件系统意味着所有的工具(Git和其他工具)都可以在你的远程文件上工作,而不是在每个应用程序中构建一个层来支持网络文件访问,而是在内核中(或通过FUSE)这样做,然后把它当作一个本地文件系统,这样你就可以免费在每个应用程序中支持网络文件访问。
5jdjgkvh3#
请记住,Git是一个DVCS。事实上,你不连接到远程服务器来提交东西是 * 通过设计 *。
你要做的是让本地Git仓库将代码推送到你的集成服务器(实际运行代码的服务器),这就像部署一样,只是你部署到测试服务器而不是生产服务器。
这通常是通过拥有一个共享的Git仓库来实现的。这个仓库should be bare。除了裸共享仓库之外,你还需要一个共享Git仓库的非裸克隆,它将作为你的Apache docroot。
当共享仓库收到一个提交时,它会让docroot仓库执行
git pull
。这可以通过在共享仓库上使用post-receive钩子来实现。
docroot存储库是在特定的分支(比如
develop
)上 checkout 的,所以即使你向其他分支提交东西并推送它们,服务器也不会受到影响。这允许您设置多个部署存储库,因此您可以将另一个分支
prod
与其中一个关联,当您将内容推送到它时,它将实际更新生产代码。它还允许你将未完成的/正在进行的工作存储在一个根本不部署的共享分支上,这样你就知道你在笔记本电脑上工作的东西在共享存储库上是安全的,即使它不能被发送到测试服务器,因为它不完整,会破坏测试服务器,使其他人无法工作或其他事情。
This article详细介绍了如何设置所有这些。我以前做过,它工作得很好。
tzdcorbm4#
我为自己找到了一个简单的方法:在传输(FTP客户端)中有一个“将收藏夹挂载为磁盘”的选项。SourceTree可以像预期的那样使用这个“虚拟”磁盘。
但有一个限制:你可以挂载磁盘并启动SourceTree,只有在你在代码中做了所有的更改并准备好进行提交/推送之后,如果你在处理代码时保持SourceTree和ssh磁盘挂载,它将不起作用。由于某种原因,由Transmit挂载的磁盘不会实时更新文件内容,而是只在卸载/挂载操作之后。
kgsdhlau5#
大约一年前,我就遇到了这个问题--不幸的是,我找不到任何一致的、可靠的答案。我在谷歌上搜索了几个星期,以为是我的搜索词没有成功--试了各种方法。
[The我们的设置是每个开发人员都有自己的开发服务器-将它们与机器分开意味着网站可以在任何地方开发,开发服务器可以设置为与实时环境完全相同,并且系统管理员可以保持它们升级和备份-我完全看到了将开发服务器与工作机器分开的优势,少数缺点之一是没有Git应用程序!
所有依赖于文件挂载或欺骗您的计算机以为远程驱动器是本地驱动器的方法都可以用于一般文件浏览,但Git应用程序在连接间歇时往往会崩溃。其他时候,您必须以某种方式执行操作,只是为了查看
git status
我知道这不是你想听到的答案,因为我在你的情况下,一段时间前,知道你的感受,但你能做的最好的事情是 * 在命令行上使用git *。
我讨厌成为那些 * 命令行更好 * 堆栈溢出的回答者之一,但在这种情况下,我找不到任何符合标准的东西,供多个开发人员每天使用。
我当时也反对它,我更喜欢更漂亮,更容易使用的UI,但自从学习命令行和git,我从来没有回头。当我在家里开始自己的项目时,我发现自己使用终端而不是任何应用程序,因为我发现他们中的许多人令人困惑!
它不仅有助于你对命令行的信心,而且自从使用终端以来,我的Git知识已经提高了十倍,因为应用程序经常隐藏很多事情。