threads / discuss / 12029

Suggestion: git status --untracked

Subject: Suggestion: git status --untracked

## tl;dr

5 messages between Feb 11, 2008 and Feb 11, 2008.

replies: 4people: 4as markdown or json

Rafael Garcia-Suarez· Feb 11, 2008, 09:46 UTC · lore

I find myself wanting sometimes to filter out the output of git-status, to feed it to another command (for example, git-add, or rm, or cat >> .gitignore). However it's not currently very easy to parse in a one-liner.

I'm suggesting to add options to control this behaviour. My suggestion would be (for a start) to add an option --untracked that will list all untracked files on stdout, without a leading "#\t", and without listing the added / modified / removed files.

I'm willing to implement it, but I'd like to have some discussion about the interface first. Is that a good idea at all, and how could it be improved interface-wise?

Matthieu Moy· Feb 11, 2008, 10:13 UTC · re: Rafael Garcia-Suarez · lore

Re: Suggestion: git status --untracked

"Rafael Garcia-Suarez" <rgarciasuarez@gmail.com> writes:
Show 9 quoted lines
> I find myself wanting sometimes to filter out the output of
> git-status, to feed it to another command (for example, git-add, or
> rm, or cat >> .gitignore). However it's not currently very easy to
> parse in a one-liner.
>
> I'm suggesting to add options to control this behaviour. My suggestion
> would be (for a start) to add an option --untracked that will list all
> untracked files on stdout, without a leading "#\t", and without
> listing the added / modified / removed files.

Actually, it's already available (since a few weeks in master IIRC, not sure whether it's in the latest release), as

  git ls-files --exclude-standard -o

The --exclude-standard tells git ls-files to read .gitignore and friends as most commands do, and -o means "show 'other' files".

Older gits didn't have the --exclude-standard, so you had to say --exclude-from=.git/info/exclude --exclude-per-directory=.gitignore (or stg like that) instead.

-- 
Matthieu
Rafael Garcia-Suarez· Feb 11, 2008, 10:54 UTC · re: Matthieu Moy · lore

Re: Suggestion: git status --untracked

On 11/02/2008, Matthieu Moy <Matthieu.Moy@imag.fr> wrote:
Show 7 quoted lines
> Actually, it's already available (since a few weeks in master IIRC,
> not sure whether it's in the latest release), as
>
>   git ls-files --exclude-standard -o
>
> The --exclude-standard tells git ls-files to read .gitignore and
> friends as most commands do, and -o means "show 'other' files".

Ah, many thanks. (Still not familiar with the plumbing.) I'm already adding an alias for that command in my config!

Jeff King· Feb 11, 2008, 10:23 UTC · re: Rafael Garcia-Suarez · lore

Re: Suggestion: git status --untracked

On Mon, Feb 11, 2008 at 10:46:25AM +0100, Rafael Garcia-Suarez wrote:
> I find myself wanting sometimes to filter out the output of
> git-status, to feed it to another command (for example, git-add, or
> rm, or cat >> .gitignore). However it's not currently very easy to
> parse in a one-liner.
Here's a one-liner:
  git status | sed -ne '/^# Untracked/,${s/#\t//p}'

Unfortunately it is both specific to GNU sed as well as horribly unreadable.

> I'm suggesting to add options to control this behaviour. My suggestion
> would be (for a start) to add an option --untracked that will list all
> untracked files on stdout, without a leading "#\t", and without
> listing the added / modified / removed files.

The problem you are running into is that "git status" has a specific purpose: generating the commit message template. Fortunately, it is built on top of plumbing that is much easier to parse:

  git ls-files -o --exclude-standard

should produce the results you want. It even has a '-z' option to do things safely in the face of filenames with newlines, and can limit itself to partial paths.

-Peff
Jakub Narebski· Feb 11, 2008, 10:56 UTC · re: Rafael Garcia-Suarez · lore

Re: Suggestion: git status --untracked

"Rafael Garcia-Suarez" <rgarciasuarez@gmail.com> writes:
> I find myself wanting sometimes to filter out the output of
> git-status, to feed it to another command (for example, git-add, or
> rm, or cat >> .gitignore). However it's not currently very easy to
> parse in a one-liner.
Probably because git-status is porcelain, and is meant to be used by
end user, not in scripts.
 
Show 8 quoted lines
> I'm suggesting to add options to control this behaviour. My suggestion
> would be (for a start) to add an option --untracked that will list all
> untracked files on stdout, without a leading "#\t", and without
> listing the added / modified / removed files.
> 
> I'm willing to implement it, but I'd like to have some discussion
> about the interface first. Is that a good idea at all, and how could
> it be improved interface-wise?

To list all untracked files you can use plumbing command, namely "git ls-files --others" (Show other files in the output), or perhaps "git ls-files -o --directory --no-empty-directory --exclude-standard"

If you want to use git command in script, it is better to find appropriate plumbing command to do what you want, for example git-ls-files instead of git-status to list untracked files, git-symbolic-ref instead of git-branch to get current branch name, etc.

-- 
Jakub Narebski
Poland
ShadeHawk on #git

← back to recent threads