git count阶段索引中的文件

时间:2010-07-01 23:46:39

标签: git

我正在试图弄清楚如何轻松计算未提交索引中的文件。

我试过了:

git status | grep '#' | wc -l

但是有几行以#开头并不代表更改的文件。谁有更好的东西?想象一下git status必须有一个标志才能做到这一点。

即使像GitX这样的工具也不容易让你选择分阶段的文件/目录,看看它们有多少。

8 个答案:

答案 0 :(得分:61)

如果你想要一个脚本可以使用的东西:

git diff --cached --numstat | wc -l

如果你想要人类可读的东西:

git diff --cached --stat

答案 1 :(得分:19)

这对我有用:

git status | grep 'modified:' | wc -l

它返回一个数字

答案 2 :(得分:9)

尝试git status -s

git status -s | egrep "^M" | wc -l
行首(M)后直接

^表示暂存文件。带有空格的^ M将是一个未分级但已更改的文件。

答案 3 :(得分:7)

对于它的价值,我更喜欢:

pom.xml
    ...
    <dependency>
        <groupId>com.vaadin</groupId>
        <artifactId>vaadin-themes</artifactId>
        <version>${vaadin.version}</version>
    </dependency>
    <dependency>
        <groupId>com.company</groupId>
        <artifactId>company-vaadin-themes</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>


...

UI.java

    @SpringUI
    @Theme("mytheme")
    public class CompanyUI extends UI {

输出类似:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>company-vaadin-themes</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <vaadin.version>7.7.3</vaadin.version>
        <vaadin.theme>mytheme</vaadin.theme>
        <vaadin.plugin.version>${vaadin.version}</vaadin.plugin.version>
    </properties>

    <repositories>
        <repository>
            <id>vaadin-addons</id>
            <url>http://maven.vaadin.com/vaadin-addons</url>
        </repository>
        <repository>
            <id>com-vaadin-prereleases</id>
            <url>https://maven.vaadin.com/vaadin-prereleases</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-server</artifactId>
            <version>${vaadin.version}</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.vaadin</groupId>
            <artifactId>vaadin-themes</artifactId>
            <version>${vaadin.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.2</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <version>${vaadin.version}</version>
            </plugin>

        </plugins>
    </build>
</project>

答案 4 :(得分:0)

也许它在9年前不可用,但是截至2019年,ls-filesdiff --stat快得多:

git ls-files --cached | wc -l

答案 5 :(得分:0)

下面应该涵盖所有情况(新的,修改的,删除的甚至是未跟踪的),它返回一个数字。

(git status -s |select-string -Pattern "^\s*[A|\?|D|M]" -AllMatches).Matches.Count

答案 6 :(得分:0)

对于正在寻找PowerShell解决方案的任何人:

(git diff --cached --numstat | Measure-Object -Line).Lines

答案 7 :(得分:0)

这有很多答案...但是最好的命令imo(它不需要任何管道,并且是纯本地git命令)仅是以下内容。请注意,这包括删除,修改和添加的文件:

git diff --cached --shortstat

输出只有一行:

X files changed, Y insertions(+), Z deletions(-)

如果未进行任何更改,则不打印任何内容(甚至不打印新的空行)。

对于未进行暂存的更改(仅省略--cached标志),如何获得相同的结果也很明显:

git diff --shortstat