相当于“svn -v status”的git

时间:2011-03-12 00:47:00

标签: svn git git-svn

我想知道版本控制已知的文件列表。

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

svn -v status

然后你会得到一个

列表
  

“[rev#1] [rev#2] [创作者] [档案   名称]“

rev#1是包含此文件的最后一个修订版,rev#2是包含此文件的第一个修订版。

此列表包含svn跟踪的所有文件,而不仅是具有本地更改的文件。

我想知道如何使用 GIT

来做到这一点

2 个答案:

答案 0 :(得分:4)

对于使用git:

的svn状态,您确实拥有this proposition
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 SO question中提到的git log --name-status(在评论中){​​{3}}可能会缩短别名。

其变体实际上基于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 "

答案 1 :(得分:3)

git status

显示的状态与svn status命令非常相似。

EG:

> $ 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
> ...

为了冗余,重复这个类似问题的答案:

List all the files that ever existed in a Git repository

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

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