什么是svn status -u
或更详细svn status --show-updates
的git等价物。
svn status --show-updates
命令显示svn update
命令将从服务器带来的更新。
谢谢!
答案 0 :(得分:34)
如果没有实际获取更新(也许其他人会),我想不出办法。假设您在默认分支“master”上,并且这些假设更新将来自的上游是默认远程“origin”,请尝试....
git fetch
git log --name-only ..origin/master
请注意双点..不是单个点或省略号 1 。
这将为您提供仅上游更改的日志条目列表,文件名受影响,您可以将参数更改为git log以获取更多或更少的信息。
在git中“提取”这些更新与将它们应用到本地分支不同。毫无疑问,你已经知道如何用git pull做到这一点。
1 至于双点的来源,name1..name2
表示范围。如果省略name1
,则会在其位置使用HEAD
。此语法指的是从name2
可以返回但不包括HEAD
的所有提交。 ["Git from the bottom up"]
答案 1 :(得分:30)
Martinho Fernandes和tialaramex答案都正确描述了您需要做的事情。让我来描述 为什么 就是这样。
Subversion 是集中式版本控制系统。这意味着它以客户端 - 服务器方式运行:服务器存储有关版本(存储库)的所有数据,客户端只有工作目录(文件)以及一些管理和帮助数据。这意味着对于大多数命令,客户端必须联系服务器。这也意味着有许多命令询问服务器上的存储库状态或服务器配置,例如“svn status --show-updates
”。
(旁注:Subversion在客户端上存储的一个帮助数据是文件的“原始”版本,这意味着检查您所做的更改不需要连接到服务器(这很慢)......但这也意味着SVN结账可能比Git存储库大。
“svn update”(如果存储库在给定分支中有任何更改,则在提交之前需要)从远程下载最后一个版本并且合并(尝试合并)您对远程更改所做的更改。恕我直言,这个更新前提交工作流程不是很好。
Git 是分布式版本控制系统。这意味着它以点对点的方式运行:每个“客户端”都包含有关版本的所有数据(完整存储库)。中央存储库仅仅是因为社会惯例而非技术限制。这意味着当联系其他远程存储库时,“远程执行”的命令数量非常少。您可以使用“git ls-remote”(以及“git update show”)索引引用(头部也称为分支和标签),您可以使用“git fetch”(或“git”来拉取(获取)或推送(发布)数据远程更新“)/”git push“,如果服务器配置为允许它,您可以使用”git archive --remote“获取远程存储库状态的快照。
因此,要检查远程存储库中但在存储库中不存在的提交,您必须将数据下载到您的计算机。但是“git pull”实际上只不过是下载数据的“git fetch”和合并它的“git merge”(用一点糖来准备提交消息并选择合并哪个分支)。然后你可以使用'git fetch'(或“git remote update”),用“git log”和“gitk”(不仅限于固定输出)检查新带来的提交,然后如果一切都好,则合并更改为“ git merge“。
这不是特定于Git,而是针对所有分布式版本控制系统,尽管SCM提供的已获取但未合并的数据的方式可能不同(Git在'remote /< remotename> / *'命名空间中使用远程跟踪分支,Mercurial根据我的理解,使用未命名的头脑。)
HTH
答案 2 :(得分:13)
如果你拿到:
git fetch <remote>
而不是拉:
git pull <remote>
从遥控器,您可以检查git log
更改的内容。要应用更改:
git merge <remote>/<remote-branch>
答案 3 :(得分:4)
您可以使用git ls-remote
列出远程存储库中引用的SHA;所以,你可以通过比较输出来看看是否有任何变化:
$ git show-ref origin/master # <-- Where this repo thinks "origin/master" is
5bad423ae8d9055d989a66598d3c4473dbe97f8f refs/remotes/origin/master
$ git ls-remote origin master # <-- Where "origin" thinks "master" is
060bbe2125ec5e236a6c6eaed2e715b0328a9106 refs/heads/master
如果它们不同,那么fetch会有变化:
$ git remote update
Fetching origin
...
From github.com:xxxx/yyyy
5bad423..060bbe2 master -> origin/master
答案 4 :(得分:3)
对我来说,只是为了显示会改变的文件,它是:
git fetch (1)
git diff --name-only ..origin/master (2)
要更新文件(不仅是Git“数据库”),请执行git merge
答案 5 :(得分:2)
Gits为我们提供了更多检查“更新”的工具。首先,您必须“下载”存储库的最新状态:
git fetch
现在您可以获取已更改文件的列表:
git log --name-status ..origin/master
另外,您可以使用diff查看完整的更改列表:
git diff ..origin/master
起始字母的含义为:添加(A),复制(C),删除(D),修改(M),重命名(R),更改(T),未合并(U),未知(X) ),或已配对破碎(B)
答案 6 :(得分:2)
git fetch && git log --name-status ..origin/master
确实显示了要合并的日志。然而,它也拉动了变化。从技术上讲,与svn status -u
做同样的事情是不可能的,但是git fetch
是如此之快,通常无关紧要
如果在获取之前绝对需要日志,唯一的方法是将(SSH或等效的)连接到远程并在那里发出git log
。