Почему "git diff" сравнивает файл с / dev / null? - PullRequest
0 голосов
/ 28 июня 2019

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

У меня такое ощущение, что проблема в том, что ветка, с которой я сравниваю, выглядит как номер ревизии.Имя ветки "2.2.0".

В одной системе, работающей с git v2.17.0, я вижу это:

% git diff -b 2.2.0 my-branch -- stuff.groovy 
diff --git a/vars/stuff.groovy b/vars/stuff.groovy
new file mode 100644
index 0000000..c6a2073
--- /dev/null
+++ b/vars/stuff.groovy
@@ -0,0 +1,84 @@

Это переходит к выводу всего содержимого файлакаждая строка начинается с «+», что очевидно, так как она сравнивается с «/ dev / null».Я понятия не имею, почему он это делает.

В другой системе, работающей с git v2.7.4, вместо другого вывода я вижу только эту строку:

fatal: bad revision '2.2.0'

Я могу сделать этосравнение в Eclipse, которое использует библиотеку JGit, а не командную строку «git», и работает отлично, показывая одну строку между этими ветвями, которая отличается.

Обновление :

Добавление результатов из следующих команд:

% git branch
  2.2.0
* cart-checkout-customizations
  master
% git tag
% git rev-parse --symbolic-full-name 2.2.0
refs/heads/2.2.0

Обновление :

Добавление вывода из другой команды для диагностики:

% git branch -a
  2.2.0
* cart-checkout-customizations
  master
  remotes/origin/2.2.0
  remotes/origin/bugfix/pr-issue
  remotes/origin/cart-checkout-customizations
  remotes/origin/dp5252/func_get_job_details_textgroovy-1560980842574
  remotes/origin/dp5252/pl_idp_msgroovy-1560289622641
  remotes/origin/dp5252/pl_idp_msgroovy-1560979038086
  remotes/origin/dp5252/stage_build_docker_imagegroovy-1559338261549
  remotes/origin/feature/2.2.0-temp
  remotes/origin/feature/2.2.1
  remotes/origin/feature/cfgrole-playbook
  remotes/origin/feature/disable-concurrent-builds
  remotes/origin/feature/hpa
  remotes/origin/feature/hygieia
  remotes/origin/feature/istio
  remotes/origin/feature/notify-stash
  remotes/origin/feature/profile-pipeline-id
  remotes/origin/feature/sast
  remotes/origin/feature/sast-swap
  remotes/origin/feature/scrumboard-removal
  remotes/origin/feature/smoke-test-fix
  remotes/origin/feature/temp-investigation
  remotes/origin/master
  remotes/origin/trackingaudit

Если это не очевидно, текущей веткой является «cart-checkout-customizations», то есть «my-branch», на которую я ссылаюсь в другом месте.Фактическое имя файла не "stuff.groovy", но это не имеет значения.

Обновление :

И, чтобы быть понятным, пример команды, предоставленной@ZachPosten работает.Я надеюсь, что это даст кому-то полезную подсказку.Это действительно похоже на то, что оригинальные команды привели к тому, что git подумал, что «2.2.0» - это НЕ ветвь, а что-то еще.Форма, которая делает явным то, что это имя ветки (предварительно добавив к нему «origin /»), каким-то образом заставила его работать.

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Поскольку файл не существует и для правильной работы diff должен быть файл, поэтому используется empty file / dev / null.

Вы также можете попробовать использовать хэш коммита последних коммитов в обеих ветвях ...

Вы пытались сделать git diff 2.2.0..my-branch?

Из документации git man git diff

Сравнение ветвей

           $ git diff topic master    (1)
           $ git diff topic..master   (2)
           $ git diff topic...master  (3)

       1. Changes between the tips of the topic and the master branches.
       2. Same as above.
       3. Changes that occurred on the master branch since when the topic branch was started off it.
0 голосов
/ 29 июня 2019

Вы уверены, что у вас есть местное отделение 2.2.0?

Возможно, попробуйте

git diff origin/2.2.0 origin/my-branch -- stuff.groovy 

Просмотр вывода git branch -a будет полезен для диагностики этого.

Обновление :

Я вижу, что у вас есть как локальная, так и удаленная ветвь 2.2.0. Тогда я думаю, что они указывают на разные коммиты, и именно поэтому ссылка на локальную ветку терпит неудачу, а удаленная ссылка успешна.

Также возможно, что в вашем репо существует другой идентификатор 2.2.0, как вы предлагаете. Чтобы понять это, вы можете запустить:

$ git show-ref 2.2.0

21787341c2e651b17d94375ecb1137b575a2099e refs/heads/2.2.0
21787341c2e651b17d94375ecb1137b575a2099e refs/remotes/up/2.2.0
a2d88e63057d7ae1484a90d36ee5b12fc78828cd refs/tags/2.2.0

Здесь вы можете видеть, что у меня есть три ссылки на 2.2.0 в моем репозитории, локальная ветвь (refs/heads), удаленная ветвь (refs/remotes) и тег (refs/tags). Ветви указывают на один и тот же коммит, но тег указывает на другой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...