不通过将对象添加到本地索引/存储库,直接向远程Git存储库编写?

5
Git是否支持任何命令,允许我直接从本地/工作树提交到远程存储库?正常的工作流需要“git add”来将文件内容等复制到对象数据库中。
我知道这不是正常的、预期的Git工作流程。但我注意到Git已经支持了直接从存储库下载,没有本地存储库(“git archive”),因此可能会有类似的上传操作。
或者,如果核心Git本身没有这样的命令,那么是否有任何第三方软件支持直接远程写入?

“git archive” 有一个特定的目的,与使用远程仓库而不是本地仓库无关。你为什么想这样做呢? - Marcelo Cantos
Marcelo,如果我正确理解 Git 的话,它将始终会完全复制工作树中的文件(虽然经过压缩/去重/打包等处理)到对象数据库中。这限制了 Git 在本地存储有限的情况下应用的范围,特别是涉及到工作树的大小、可压缩性和变化频率时。如果 Git 能够避免使用本地仓库,或者至少避免使用本地对象数据库,那么这个问题就会减轻一些。 - Ryan B. Lynch
不,你所问的没有任何意义。说真的,硬盘空间非常便宜。一天的工资就可以买一个500GB甚至1TB的硬盘。Git仓库非常小。 - hasen
hasen j,你的评论和回答语气相当对抗。听着,我不介意你无法想象出我的操作需求可能发生的情况--这并不意味着你比较低劣,只是说明你对我的工作或类似事物没有任何了解和经验。如果你没有任何有用的技术贡献,我宁愿你不要发表评论。 - Ryan B. Lynch
2个回答

2
据我所知,没有(不是直接的,在结尾处可以看到我的完整答案):
以下是本地和远程仓库之间的官方Git数据工作流程: alt text (来源:osteele.com)
如您所见,`git add`与索引有关,还不会影响您的本地仓库。 所有命令的设置都是为了帮助执行一些出版政策。

alt text
(来源:osteele.com)

(Note: The text is already in Chinese. Do you need it translated to another language?)
直接影响远程仓库的唯一方法是使用本地更改(因为在 Git 中,工作目录中的更改是完全未知的),你需要做以下操作:
git diff -p origin > diff_not_in_origin.patch

发送补丁并确保“原始”服务器已经设置了某种触发器,可以自动git am该补丁。

感谢VonC,非常详细的解释。如果我正确理解了'git am',它会在后台调用'git apply'。根据手册,我相信'git apply'无法在裸库上工作。因此,在这里,最好的选择似乎是将索引/对象数据库操作(和磁盘使用)移动到远程主机上? - Ryan B. Lynch
@Ryan:是的,或者你可以使用git bundle(https://dev59.com/3nE85IYBdhLWcg3w64EA#2545784)只移动*一个*文件,并在那里创建你的裸仓库(https://dev59.com/JnI-5IYBdhLWcg3wfoW1#1830712),然后从那里进行各种可能性操作(https://dev59.com/FXE95IYBdhLWcg3wPbZ7#2400914)。 - VonC

1

我自己没有尝试过,但你可以尝试使用CVS访问你的git仓库,使用"git cvsserver"命令。你仍然需要在本地拥有一个工作副本,但它只包含项目文件的一份副本以及一些CVS元数据。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接