svn状态的git等价物-u

svn状态的git等价物-u,git,svn,Git,Svn,git与svn status-u或更详细的svn status-show updates的等价物是什么。 svn status--show updates命令显示svn update命令将从服务器带来的更新 谢谢 如果您获取: git fetch <remote> 我想不出一个不获取更新的方法(也许其他人会)。假设您在默认的分支“master”上,并且这些假设更新将来自的上游是默认的远程“origin”,请尝试 注意双点。。没有一个点或一个省略1 这将为您提供仅在上游进行的更改的日

git与svn status-u或更详细的svn status-show updates的等价物是什么。
svn status--show updates
命令显示
svn update
命令将从服务器带来的更新

谢谢

如果您获取:

git fetch <remote>

我想不出一个不获取更新的方法(也许其他人会)。假设您在默认的分支“master”上,并且这些假设更新将来自的上游是默认的远程“origin”,请尝试

注意双点。。没有一个点或一个省略1

这将为您提供仅在上游进行的更改的日志条目列表,在文件名受到影响的情况下,您可以将参数更改为git log以获得更多或更少的信息

注意:在git中,“获取”这些更新与将它们应用于本地分支不同。毫无疑问,您已经知道如何使用git pull实现这一点


1至于双点来自何处,
name1..name2
表示一个范围。如果省略了
name1
,则使用
HEAD
。此语法表示可从
name2
返回到但不包括
HEAD
的所有提交。[]

两个答案都正确地描述了您需要做的事情。让我描述一下为什么是这样


颠覆 Subversion是集中式版本控制系统。这意味着它以客户机-服务器的方式运行:服务器存储关于版本(存储库)的所有数据,客户机只有工作目录(文件)以及一些管理和帮助数据。这意味着对于大多数命令,客户端必须联系服务器。这还意味着,有许多命令询问服务器上存储库的状态或服务器配置,如“
svn status--show updates

(旁注:Subversion存储在客户机上的一个助手数据是文件的“原始”版本,这意味着检查您所做的更改不需要连接到服务器(这很慢)……但也意味着SVN签出可能比Git存储库大)

“svn更新”(如果存储库在给定分支中有任何更改,则在提交之前必需)从远程下载最新版本,并合并(尝试合并)您对远程更改所做的更改。IMHO提交前的此更新工作流不是很有效


吉特 Git是分布式版本控制系统。这意味着它以点对点的方式运行:每个“客户机”都有关于版本的所有数据(完整存储库)。中央存储库之所以是中央存储库,仅仅是因为社会惯例,而不是技术限制。这意味着当联系其他远程存储库时,“远程执行”的命令数量非常少。您可以使用“git ls remote”(和“git update show”)请求引用(heads aka.branchs和tags),您可以使用“git fetch”(或“git remote update”)/“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//*”命名空间中使用远程跟踪分支,据我所知,Mercurial使用未命名的头)



HTH

对于我来说,只是为了显示将要更改的文件,它是:

git fetch (1)
git diff --name-only ..origin/master (2)
  • 获取Git“数据库”(仅.Git目录)中的更改,并且不更改文件
  • 显示合并后将更改的文件的名称

  • 要更新文件(不仅仅是Git“数据库”),请执行Git合并

    Gits为我们提供了更多检查“更新”的工具。首先,您必须“下载”存储库的最新状态:

    git fetch
    
    现在,您可以获得已更改文件的列表:

    git log --name-status ..origin/master
    
    此外,您还可以通过diff查看完整的更改列表:

    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

    您可以使用
    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
    

    如果您说明svn命令的作用,您的问题会更好。这只需要git的专业知识来回答,几乎不需要svn知识。谢谢,我添加了必要的解释。+1虽然对git来说比较陌生,但我必须研究一下为什么会出现双点。之后,我觉得自己不得不扩展您的answer来帮助其他git新手。您的答案基本上是合理化了为什么
    svn status-u
    需要两个git命令,这实际上可以是各种不同的命令(
    get remote update
    git fetch
    ,等等)
    git log --name-status ..origin/master
    
    git diff ..origin/master
    
    $ 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