"svn -v status" 的 Git 等效命令是什么?

7

我希望了解已知版本控制的文件列表。

我知道在SVN中,您可以执行以下操作:

svn -v status

然后你会得到一个列表,其中包含:

"[rev#1] [rev#2] [创建者] [文件名]"

其中rev#1是具有此文件的最后一次修订,而rev#2是具有此文件的第一次修订。

此列表包含除仅具有本地更改的文件以外的所有由svn跟踪的文件。

我想知道如何使用GIT完成这个操作。

2个回答

4

您可以使用以下命令在Git中实现与svn status类似的功能: git status

git config alias.svn-status \!"\
{ \
git ls-files -o --directory -t ; \
git status | grep --color=never 'deleted:    ' | sed 's|^.*deleted:    ||' | sed 's|^|D |' ; \
git ls-files -m -s | awk '{print \$NF}' | sort -u | sed 's|^|M |' ; \
} \
| sort -k 2 \
| sed 's|^\\(.\\) *|\\1      |'"

我猜测Techism(在评论中提到)所提到的git log --name-status可能会使别名更短。
它的变体实际上是基于diff --name-status
svn-status = "! git ls-files --exclude-per-directory=.gitignore --exclude-from=.git/info/exclude --exclude-from=$HOME/.gitignore --others -t | sed 's| |\t|'; git diff HEAD --name-status "

3

git status

这个命令会显示类似于svn status命令的状态信息。

例如:

> $ git status
> # On branch master
> # Your branch is ahead of 'origin/master' by 2 commits.
> #
> # Changed but not updated:
> #   (use "git add/rm <file>..." to update what will be committed)
> #   (use "git checkout -- <file>..." to discard changes in working
> directory)
> #
> # modified:   Gemfile
> # modified:   Gemfile.lock
> # modified:   app/controllers/application_controller.rb
> # modified:   app/controllers/home_controller.rb
> # modified:   app/controllers/projects_controller.rb
> ...

为了冗余考虑,重复回答与此类似的问题:

列出 Git 仓库中曾经存在的所有文件

git log --pretty=format: --name-only --diff-filter=A | sort -

或者
git log --pretty=format: --name-status | cut -f2- | sort -u

2
"svn -v status" 显示所有被 svn 跟踪的文件。我认为 "git status" 只显示本地更改的文件。 - Vicky
实际上:我认为这个线程回答了你的问题...https://dev59.com/x3RB5IYBdhLWcg3wtZIV - Techism
谢谢,您上面发布的命令确实帮了我很多。有没有办法过滤掉不存在的文件? - Vicky
这是一个不错的起点。http://www.kernel.org/pub/software/scm/git/docs/git-log.html - Techism

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