git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: git ls-files handles paths differently in Windows and Mac (probably Linux)

From
Kirill Likhodedov <kirill.likhodedov@jetbrains.com>
Date
Oct 13, 2010, 09:09 UTC
Message-ID
<AEC0873D-4AFC-402E-9D7D-197A7D40DCDD@jetbrains.com>
In-Reply-To
<AANLkTi=6nJAYKB_MTjXL3oftcWtr_wtdHaULYzRcP6oP@mail.gmail.com>
12.10.2010, в 19:25, Alex Riesen написал(а):
> 
> Besides, if you have to just check if the tree under a path is changed
> you can always use
> --exit-code or --quiet to "git diff", it will speed them up.

Unfortunately, that's not enough: I have to know which files have changed and how (created, deleted, modified). Also I feel that it's not the size of the output which is slow - the scan of directories itself is.

>> And also "git diff --name-status" doesn't show unversioned files.
>> As I've found, "git ls-files" is the only command which shows unversioned files (except git status), isn't it?
> 
> Yes, you're right. What are you trying to do, BTW?

I'm developing a plugin for Git integration for IntelliJ IDEA (an IDE for Java and other languages). And the task I'm working now is to get the status of index and working tree. I want to make it as fast as possible. To work with a Git repository I start a process with git native commands, so every command to execute is additional cost. (Maybe I could work with the filesystem and raw Git repository, but it would be an overhead).

If we forget about "git status --porcelain" there is no single command to get the whole status. I could use "git ls-files -ov" for unversioned files + "git diff --name-status" for all other. OR "git ls-files -douvm" for the changes in the working tree + "git diff-index --cached" for the changes in the index. OR "git ls-files -ov" for unversioned + "git diff-files" for other files in the working tree + "git diff-index --cached" for the changes in the index. or maybe something else

I've made a script which executes these commands (which allow to get the total status) on a large repository many times. My results show that "ls-files -douvm"+"git diff-index --cached" is the fastest combination.

Do you think I could achieve the same result in a simpler or faster way?
Thanks a lot.

---------------------------------- Kirill Likhodedov JetBrains, Inc http://www.jetbrains.com "Develop with pleasure!"

Previous: Alex RiesenNext: Alex Riesen
Message 6 of 13 in “git ls-files handles paths differently in Windows and Mac (probably Linux)”
  1. Kirill LikhodedovOct 12, 2010
  2. Alex RiesenOct 12, 2010
  3. Kirill LikhodedovOct 12, 2010
  4. Kirill LikhodedovOct 12, 2010
  5. Alex RiesenOct 12, 2010
  6. Kirill LikhodedovOct 13, 2010
  7. Alex RiesenOct 13, 2010
  8. Jakub NarebskiOct 13, 2010
  9. Kirill LikhodedovOct 13, 2010
  10. Alex RiesenOct 12, 2010
  11. Johannes SixtOct 12, 2010
  12. Kirill LikhodedovOct 12, 2010
  13. Johannes SixtOct 12, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.