相当于svn status -u的git
什么是svn status -u
或更详细的svn status --show-updates
的git等价物。 svn status --show-updates
命令显示svn update
命令将从服务器带来的svn update
。
谢谢!
我想不出没有实际获取更新(也许别人会)的方法。 假设你在默认分支“主”和上游这些假设的更新将是默认的远程“起源”,请尝试….
git fetch git log --name-only ..origin/master
注意双点..不是一个点或一个elipsis 1 。
这将给你一个只有上游的变化的日志条目列表,受影响的文件名,你可以改变参数,以获得更多或更less的信息。
注意在git中“获取”这些更新与将它们应用到本地分支不同。 你无疑已经知道如何用git pull来做到这一点。
1至于双点来自哪里, name1..name2
表示一个范围。 如果省略name1
,则在其位置使用HEAD
。 这个语法引用了从name2
返回到但不包括HEAD
所有提交。 [ “自下而上” ]
Martinho Fernandes和tialaramex答案都正确地描述了你需要做的事情。 让我来描述为什么它是这样的。
颠覆
Subversion是集中版本控制系统。 这意味着它以客户端 – 服务器方式运行:服务器存储所有关于版本(存储库)的数据,客户端只有工作目录(文件)以及一些pipe理和帮助数据。 这意味着对于大多数命令客户端必须联系服务器。 这也意味着有很多命令询问服务器上的存储库状态,或服务器configuration,如问题中的“ svn status --show-updates
”。
(旁注:Subversion存储在客户端上的一个帮助程序数据是文件的“原始”版本,这意味着检查您所做的更改不需要连接到服务器(这很慢)…但这也意味着SVN签出可能比Git存储库大)。
“svn update”(在提交之前需要,如果存储库在给定的分支中有任何更改)从远程下载最后一个版本并合并(尝试合并)您对远程更改所做的更改。 恕我直言,这个更新提交之前的工作stream程是不是很传导。
混帐
Git是分布式版本控制系统。 这意味着它以点对点的方式运行:每个“客户端”都有关于版本(完整存储库)的所有数据。 中央存储库仅仅是因为社会习惯而不是技术局限。 这意味着当联系其他远程仓库时,“远程执行”命令的数量非常less。 你可以用“git ls-remote”(和“git update show”)来请求引用(头文件,分支和标签),你可以用“git fetch”(或者“git远程更新“)/”git push“,如果服务器configuration为允许,你可以通过”git archive –remote“获得远程仓库状态的快照。
因此,要检查位于远程存储库但不在存储库中的提交,必须将数据下载到您的机器。 但是“git pull”实际上就是下载数据的“git fetch”和合并它的“git merge”(用一点糖来准备提交消息并select合并的分支)。 然后你可以使用“git fetch”(或者“git remote update”),检查带有“git log”和“gitk”的新提交的提交(不限于固定输出),然后如果一切正常,混帐合并“。
这不是特定于Git,而是所有分布式版本控制系统,尽pipeSCM呈现提取但未合并数据的方式可能不同(Git在远程/ <remotename> / *'命名空间中使用远程跟踪分支, ,使用无名头)。
HTH
如果你提取:
git fetch <remote>
而不是拉:
git pull <remote>
从远程,你可以检查什么改变与git log
。 要应用更改:
git merge <remote>/<remote-branch>
您可以使用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
如果它们不同,则有取消的变化:
$ git remote update Fetching origin ... From github.com:xxxx/yyyy 5bad423..060bbe2 master -> origin/master
对我来说,只是为了显示将改变的文件,它是:
git fetch (1) git diff --name-only ..origin/master (2)
- 获取Git“数据库”(仅限.git目录)中的更改,并且不会更改文件。
- 显示合并后将更改的文件的名称
要更新文件(不仅Git“数据库”)做一个混帐合并
Gits给了我们更多的工具来检查“更新”。 首先,您必须“下载”存储库的最新状态:
git fetch
现在你可以得到更改文件的列表:
git log --name-status ..origin/master
另外,你可以看到差异的完整列表:
git diff ..origin/master
(A),复制(C),删除(D),修改(M),更名(R),更改(T),未合并(U),未知(X)或(B)
git fetch && git log --name-status ..origin/master
确实显示了将被合并的日志。 但是,它也拉动了变化。 和svn status -u
做同样的事情在技术上是不可能的,但是git fetch
是如此之快以至于通常不会有影响
如果您在获取日志之前绝对需要日志,唯一的方法是将(SSH或等效)连接到远程并在那里发出git log
。