Подтвердить что ты не робот

Кроме сравнения с `git difftool --dir-diff` - проблема с sym-ссылками

Установите новый репозиторий git и добавьте несколько файлов:

[Feb-09 18:35][Desktop]$ mkdir exampleForStackOverflow
[Feb-09 18:35][Desktop]$ cd exampleForStackOverflow/

[Feb-09 18:35][exampleForStackOverflow]$ git init
Initialized empty Git repository in ~/Desktop/exampleForStackOverflow/.git/

[Feb-09 18:35][exampleForStackOverflow]$ touch foo.txt
[Feb-09 18:35][exampleForStackOverflow]$ touch bar.txt
[Feb-09 18:35][exampleForStackOverflow]$ touch baz.txt

[Feb-09 18:36][exampleForStackOverflow]$ git add *

[Feb-09 18:36][exampleForStackOverflow]$ git commit -m "Create files"
[master (root-commit) 42bfa60] Create files
 3 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar.txt
 create mode 100644 baz.txt
 create mode 100644 foo.txt

Измените файлы:

[Feb-09 18:37][exampleForStackOverflow]$ echo "Foo" > foo.txt 
[Feb-09 18:37][exampleForStackOverflow]$ echo "Bar" > bar.txt 
[Feb-09 18:37][exampleForStackOverflow]$ echo "Baz" > baz.txt

Текущее состояние:

[Feb-09 18:38][exampleForStackOverflow]$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

    modified:   bar.txt
    modified:   baz.txt
    modified:   foo.txt

no changes added to commit (use "git add" and/or "git commit -a")

Текущая разность:

[Feb-09 18:38][exampleForStackOverflow]$ git diff
diff --git a/bar.txt b/bar.txt
index e69de29..ebd7525 100644
--- a/bar.txt
+++ b/bar.txt
@@ -0,0 +1 @@
+Bar
diff --git a/baz.txt b/baz.txt
index e69de29..a688182 100644
--- a/baz.txt
+++ b/baz.txt
@@ -0,0 +1 @@
+Baz
diff --git a/foo.txt b/foo.txt
index e69de29..bc56c4d 100644
--- a/foo.txt
+++ b/foo.txt
@@ -0,0 +1 @@
+Foo

Теперь с bcompare я получаю следующее:

[Feb-09 18:38][exampleForStackOverflow]$ git difftool --dir-diff

введите описание изображения здесь

Это явно не ожидаемое поведение. Файлы не выравниваются, поэтому различия не могут быть видны.


Я запускаю:

[Feb-09 18:44][exampleForStackOverflow]$ git --version
git version 2.7.1

[Feb-09 18:44][exampleForStackOverflow]$ cat /etc/redhat-release 
CentOS release 6.6 (Final)

Beyond Compare: Version 4.1.3 (build 20814)

git config:

[Feb-09 18:45][exampleForStackOverflow]$ git config --list
color.ui=true
user.name=FOO
[email protected]
log.decorate=full
diff.tool=bc3
difftool.bc3=trustExitCode
merge.tool=bc3
mergetool.bc3=trustExitCode
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true

Вопрос: (Из Исмаил Бадави) Что это связано с символическими ссылками?

Ответ: Извините, что скриншот не очень ясен, но файлы с правой стороны являются символическими ссылками. См. Ниже:

[Feb-09 18:52][exampleForStackOverflow]$ cd /tmp/git-difftool.RWDqE/right
[Feb-09 18:52][right]$ ll
total 0
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 bar.txt -> /home/BAZ/Desktop/exampleForStackOverflow/bar.txt
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 baz.txt -> /home/BAZ/Desktop/exampleForStackOverflow/baz.txt
lrwxrwxrwx 1 BAZ BAZ_g 54 Feb  9 18:51 foo.txt -> /home/BAZ/Desktop/exampleForStackOverflow/foo.txt
4b9b3361

Ответ 1

В дополнение к предложению sixtyfootersdude, другой вариант - заставить Beyond Compare следовать символическим ссылкам. Это позволит выровнять символические ссылки с файлами с тем же именем.

В Сравнении папок нажмите кнопку панели инструментов Правила (значок судьи). Перейдите на вкладку Обработка. Проверьте Следуйте по символическим ссылкам.

Чтобы это отразилось на всех новых сеансах, измените раскрывающийся список в нижней части диалогового окна с Использовать только для этого представления на . Также перед обновлением нажмите кнопку "Обновить настройки сеанса".


Фотосъёмка:

enter image description here

enter image description here

Ответ 2

Использование этого будет работать:

git difftool --dir-diff --no-symlinks

Из git doc:

- [нет-] символьные ссылки

git поведение по умолчанию diffftool создает символические ссылки на рабочее дерево при запуске в режиме -dir-diff и в правой части сравнения дает тот же контент, что и файл в рабочем дереве.

Задание --no-symlinks инструктирует git diffftool создавать копии вместо. --no-symlinks является стандартным для Windows.