假设我有一个存储在服务器中的大型Git存储库,因此多人可以使用它。
我希望能够处理来自此存储库的单个文件,即读取,编辑或插入新文件,而无需获取其所有内容,因为它是一个相当大的存储库。
我知道我可以使用archive
命令从特定分支/提交中获取文件并解压缩结果,如下所示:
git archive --remote=git:<URL> <tree-ish> <file_name> | tar -x
另一种方式呢?有没有办法可以编辑,插入或删除给定分支中的新文件,甚至可以将新分支推送到远程Git存储库而无需下载所有内容?
答案 0 :(得分:3)
据我所知,没有办法做你想做的事。 当您尝试将某些提交推送到远程存储库时,Git将检测您当前的分支是否在其远程对应的后面,并且在这种情况下它将提示错误:
! [rejected] master -> master (non-fast-forward)
以下面的场景为例:
A - B - C - D (remote master)
\
- E (local master)
如果你试图在这种情况下推动,Git会阻止你并建议:
更新被拒绝,因为您当前分支的提示落后于其远程对应方。在再次推送之前合并远程更改(例如'git pull')。
也就是说,您必须获取远程分支,合并更改然后推送合并的结果。 Git阻止您推送可能与远程分支冲突的更改,并要求您在推送之前本地合并更改(并可能解决冲突)。
作为旁注,您可以使用git push --force
推送Git中的非快进更改(即避免获取遥控器)。应该尽可能避免强制推送,因为它可能会产生一些令人不快的后果,因为某些人可能已经拉过一些提交无法访问。
在上一个场景中,强制推送将导致:
A - B - E (remote/local master)
正如您所看到的那样,这会给在前一状态下拉遥控器的人带来一些麻烦。
有关git push --force
查看this堆栈溢出问题的后果的详尽说明。
你在Git中也可以做的是获取一个遥控器,只检查一些文件。您可以通过以下方式实现此目的:
git fetch
git checkout FETCH_HEAD -- <file-path>
然而,这并不能解决您的问题,因为它仍然会取出遥控器,并且不允许您在没有合并的情况下进行推送。