Git локальные изменения/diff/JGIT

Я застрял на следующей проблеме:

Это то, что я хочу:

  • команда git, которую я могу использовать, чтобы показать изменения «US»
  • он должен работать как статус (покажите, что я сделал) по сравнению с удаленным

Вот что я пробовал:

  1. git diff [в JGit -> diffentry] со многими параметрами, например. master..branchName
  2. Я попытался найти команду git status, которая работает с двумя коммитами.
  3. Я просмотрел все методы diffEntry[JGIT], чтобы найти способ получить желаемый результат.
  4. Я искал методы JGit, которые покажут мне желаемый результат.

    К 1. -> Проблема: когда я изменяю файл на удаленном компьютере, команда git diff показывает файл как «M» для измененного, но пользователь не изменил его, это может быть правдой. , но это не то, что я ищу

    To 2. -> git Status - это то, что я хотел бы использовать, потому что он показывает именно то, что я хочу... но только от индекса до головы...

Для чего?

Мне нужен список из всех файлов, которые пользователь изменил/добавил/удалил, чтобы я мог перебирать его и помещать информацию о заголовке в каждый файл непосредственно перед тем, как он нажмет файл.

Как рабочий процесс?

Я клонирую ветку, делаю N-коммиты и теперь хочу нажать. Каждый файл в этом N-коммите должен быть изменен. (и это проблема с этим измененным, если он изменен в удаленной ветке, но не локально, я не должен трогать его своим скриптом, но у меня нет возможности различить эти два)

€dit: Дополнительная информация

git diff-index делает почти то, что я хочу. Проблема: мне нужно фильтровать только «наши» изменения. Поэтому, если файл изменен на удаленном компьютере, я не хочу его видеть. Я хочу видеть МОИ измененные файлы.


person Keey    schedule 22.03.2016    source источник
comment
Побалуйте меня, если хотите. Вы просто ищете способ увидеть различия между вашими локальными изменениями и удаленными?   -  person Hexana    schedule 22.03.2016
comment
Да, но со следующим ограничением: git diff показывает файл как измененный, если он был изменен в удаленной ветке, но я хочу показать пользователю только те файлы, которые он изменил/удалил/добавил, поэтому это сбивает с толку, если он видит измененный файл. файл, который он не трогал.   -  person Keey    schedule 22.03.2016
comment
Я не на 100% понимаю, о чем вы спрашиваете, но вот несколько предложений. git diff origin/master предоставит вам различия между вашей локальной веткой и удаленной. Вы также можете сделать: git fetch origin, если вы знаете, что на удаленном компьютере есть изменения, и чтобы увидеть различия, которые вы делаете, git log -p HEAD..origin. Другая возможность найти различия — это $ git diff --name-status master..branchName (очевидно, изменяя имена соответствующих веток). У меня такое чувство, что последний может быть тем, что вы ищете?   -  person Hexana    schedule 22.03.2016
comment
Проблема с этими вызовами в том, что они не различаются. Особенно последнее ПОЧТИ то, что я хочу. Он показывает мои текущие измененные файлы. Но теперь проблема: он показывает мне файл как измененный, если я его не модифицировал, но он был изменен удаленно, и я никак не могу увидеть, какая сторона его модифицировала. Я хочу видеть ТОЛЬКО пользовательские изменения (изменено, удалено, добавлено).   -  person Keey    schedule 22.03.2016
comment
вы пробовали git diff-index ‹название ветки›, он должен сравниваться только с индексом, а не с удаленным; вы также можете посмотреть git diff-файлы   -  person Frederic Henri    schedule 22.03.2016
comment
git diff-index делает то же самое. Файл помечается как измененный, даже если локальная ветвь не изменяла его. (Это правильно со стороны git, но не то, что я хочу, я хочу видеть только свои собственные изменения) diff-файлы отображаются только до последней фиксации. Но спасибо! Я просмотрел страницу справки для diff-индекса, и мне нужен фильтр, чтобы показать только МОЮ сторону изменения/удаления/добавления - возможно ли это?   -  person Keey    schedule 22.03.2016
comment
но если вы выполняете git fetch перед выполнением diff, у вас должно быть только ваше изменение   -  person Frederic Henri    schedule 22.03.2016


Ответы (1)


Если вы хотите видеть изменения только на своей стороне, вам следует обновить индекс перед сравнением, поэтому запустите git fetch <remote> <branch>, и ваше дерево индексов будет обновлено, после этого вы можете запустить git diff-index <branch>

вы можете добавить --diff-filter=ADM, если хотите выбрать только те файлы, которые добавлены (A), удалены (D), изменены (M)

person Frederic Henri    schedule 22.03.2016
comment
Я только что протестировал его, и он не работает: Вот что я сделал: -ДРУГОЙ ПК- (на другом ПК, чем мой) // 1) git clone 2) git checkout develop 3) изменение файла 4) git commit -a - m test 5) git push -MY PC- (на моем компьютере, текущий мастер ветки) // 1) git fetch origin development 2) git diff-index --name-status origin/develop И измененный файл с другого компьютера показано .. Думаю, я делаю что-то не так. Спасибо за вашу помощь. - person Keey; 22.03.2016
comment
как только вы получите источник, просто сравните с локальным индексом git diff-index --name-status - person Frederic Henri; 22.03.2016
comment
Если я напишу эту команду именно так, я получу информационный текст о том, как использовать эту команду. Может быть, это потому, что мы используем git 2.6? - person Keey; 22.03.2016