Я посмотрел на все подобные вопросы. Тем не менее, я дважды проверил, и определенно происходит что-то странное.
На одном сервере (Solaris с Git 1.8.1) я клонировал репозиторий Git, а затем скопировал папку .git в мои существующие живые файлы. Это работало отлично, я мог бежать
git status
затем
git diff [filename]
проверить любые файлы, которые были разными.
На другом сервере (Solaris с Git 1.7.6) я делаю то же самое, однако
git diff [filename]
ничего не показывает, даже если содержимое файла определенно отличается. Я также протестировал добавление нового файла, его фиксацию и последующее редактирование. Та же проблема, git status
показывает файл как измененный, но git diff
ничего не показывает. Если я загружаю измененный файл и запускаю diff локально, я получаю вывод diff.
git diff --cached
.git diff --cached
просто дает мне пустой вывод, а также.git log
также не дает никакого выхода.core.fileMode
вариант здесь 2) Кроме того, я сталкиваюсь с подобной проблемой с конфигурацией Console2 (у меня это есть под git), когда Console2 фактически работает. Может быть, своего рода блокировка файла делает штуку, что файл изменился.Ответы:
Я добавил файл в индекс :
а потом побежал:
Вы можете увидеть описание git diff здесь .
Если вам нужно отменить git add, пожалуйста, смотрите здесь: Как отменить 'git add' перед коммитом?
источник
Есть несколько причин, по которым
git status
может показаться разница, ноgit diff
нет.Режим (биты разрешений) файла изменился - например, с 777 до 700.
Стиль перевода строки изменен с CRLF (DOS) на LF (UNIX)
Самый простой способ выяснить, что произошло, - это запустить
git format-patch HEAD^
и посмотреть, что говорит сгенерированный патч.источник
Для меня это было связано с правами доступа к файлам. Кто-то с Mac / Linux в моем проекте, кажется, фиксирует некоторые файлы с разрешениями не по умолчанию, которые мой git-клиент Windows не смог воспроизвести. Решением для меня было сказать git игнорировать права доступа к файлам:
Другое понимание: как заставить Git игнорировать изменения режима файла (chmod)?
источник
У меня была проблема, когда сотни программ были изменены в конце программы и
git diff
перечислили все исходные файлы как измененные. После исправления концов строки,git status
все равно перечислил файлы как измененные.Мне удалось решить эту проблему, добавив все файлы в индекс, а затем сбросив индекс.
core.filemode
был установлен в ложь.источник
git add --renormalize .
, смотри мой ответ ниже.Я подозреваю, что что-то не так с вашей установкой Git или вашим репозиторием.
Попробуйте запустить:
Посмотри, получишь ли ты что-нибудь полезное. Если это не поможет, просто используйте strace и посмотрите, что идет не так:
источник
-F
флаг вLESS
переменную env, который сообщает меньше, чтобы выйти, если для отображения информации требуется менее одного экрана. Поскольку git использует меньше как пейджер, и у меня был маленький diff, ничего не показывалось. Либо мне пришлось добавить-X
вLESS
env, который показывает содержимое на экране даже после меньшего количества выходов, либо просто удалить-F
.GIT_TRACE
показал,less
что выполняется, что напомнило мне, что я изменилLESS
недавно переменную. Та же причина в ответе @ rcwxok, но хотел прокомментировать, как этоGIT_TRACE
помогло.core.pager
в.gitconfig
, который прекрасно работает для меня.У меня была похожая проблема:
git diff
показывали бы различия, ноgit diff <filename>
не показывали . Оказалось, что я установилLESS
строку, включающую-F
(--quit-if-one-screen
). Снятие этого флага решило проблему.источник
-F
, добавление-X
может также работать, см. Мой ответ ниже для аналогичного случая.Как уже отмечалось в предыдущем ответе , эта ситуация может возникнуть из-за проблем с окончанием строки (CR / LF против LF). Я решил эту проблему (под Git версии 2.22.0) с помощью этой команды:
Согласно инструкции:
источник
Короткий ответ
Бег
git add
иногда помогает.пример
Git показывает состояние измененных файлов, а git diff ничего не показывает ...
... запуск git add разрешает несоответствие.
источник
status
иdiff
есть отдельные способы справиться с ними.Я столкнулся с этой проблемой. Мой случай был похож на
LESS
вопрос, опубликованный rcwxok .В моем случае я установил
PAGER
переменную окружения наPAGER='less -RSF'
.Однако, в отличие от предыдущих ответов, я не хотел удалять эту
-F
опцию, потому что я явно поместил ее там в надежде предотвратить показ различий,less
если он короче, чем скрин.Для того, чтобы получить желаемый результат, а не удалять
-F
, я добавил-X
:PAGER='less -RSFX'
. Это решилоgit diff
проблему и, кроме того, не позволяет показывать короткие различияless
.источник
Я только что столкнулся с подобной проблемой.
git diff file
ничего не показывал, потому что я добавил файл в индекс Git с какой-то частью его имени в верхнем регистре:GeoJSONContainer.js
.После этого я переименовал его,
GeoJsonContainer.js
и изменения перестали отслеживаться.git diff GeoJsonContainer.js
ничего не показывал. Мне пришлось удалить файл из индекса с флагом принудительной установки и снова добавить файл:источник
Вы на самом деле не задавали актуальный вопрос, но так как это общий случай использования, я использую довольно часто вот что я делаю. Вы можете попробовать это сами и посмотреть, не исчезнет ли ошибка.
Мое предположение о вашем случае использования:
У вас есть существующий каталог, содержащий файлы и каталоги, и теперь вы хотите преобразовать его в репозиторий Git, который клонируется из другого места без изменения каких-либо данных в вашем текущем каталоге.
Есть действительно два пути.
.git
Репозиторий клонов - mv - git reset --hardЭтот метод - то, что вы сделали - клонировать существующий репозиторий в пустой каталог, а затем переместить
.git
каталог в каталог назначения. Чтобы работать без проблем, это обычно требует от вас, чтобы запуститьОднако это изменит состояние файлов в вашем текущем каталоге. Вы можете попробовать это в полной копии / rsync вашего каталога и изучить, какие изменения. По крайней мере, после этого вы больше не должны видеть расхождений между
git log
иstatus
.Инициировать новый репозиторий - указать на источник
Второе менее тревожно:
cd
в пункт назначения и запустите новый репозиторий сЗатем вы говорите этому новому хранилищу, что у него есть предок в другом месте:
Тогда благополучно
копировать данные без изменения локальных файлов. Теперь все должно быть хорошо.
Я всегда рекомендую второй способ, чтобы быть менее подверженным ошибкам.
источник
.git
папки в другие рабочие области, мы потенциально нарушаем допущения git. Если это приводит к нестабильному поведению, мы не можем винить git, мы должны винить себя за то, что играем с git. Git предоставляет средства для исправления этого, напримерreset --hard
. Просто это не то, что мы хотим. Это как раз та причина, по которойinit/remote add
путь рекомендуется, и все хорошо.remote add
способ делать вещи по- прежнему может быть применен к перепутались ситуациям , подобные описанному Оливер PЯ снова наткнулся на эту проблему. Но на этот раз это произошло по другой причине. Я скопировал файлы в репозиторий, чтобы перезаписать предыдущие версии. Теперь я вижу, что файлы изменены, но diff не возвращает diff.
Например, у меня есть файл mainpage.xaml. В проводнике я вставил новый файл mainpage.xaml поверх файла в моем текущем репо. Я сделал работу на другом компьютере и просто вставил файл сюда.
Файл показывает измененный, но когда я запускаю git diff, он не показывает изменения. Возможно, это связано с тем, что информация о файле в файле изменилась, и git знает, что это не тот же файл. Интересный.
Вы можете видеть, что когда я запускаю diff для файла, он ничего не показывает, просто возвращает приглашение.
источник
Я описал эту проблему следующим образом: если я набрал
Git просто вернулся к приглашению без ошибок.
Если бы я напечатал
Git просто вернулся к приглашению без ошибок.
Наконец, читая вокруг, я заметил, что на
git diff
самом деле вызываетmingw64\bin\diff.exe
сделать работу.Вот сделка. Я использую Windows и установил другую утилиту Bash, и она изменила мой путь, чтобы он больше не указывал на мой mingw64 \ bin .
Так что если вы наберете:
и он просто возвращается к подсказке, у вас может быть эта проблема.
Наконец, чтобы это исправить, я скопировал
mingw64\bin
каталог в то место, где его искал Git. Я попробовал, но он все еще не работал.Затем я закрыл окно Git Bash и снова открыл его, перешел в мой тот же репозиторий, который вышел из строя, и теперь он работает.
источник