2015-11-18 6 views
2

Я проверил проект с внутреннего сервера GitLab с помощью Eclipse, затем я вытащил все изменения. Когда я просматриваю историю из Eclipse. (Team> show in history), он отображает полную историю проекта. Теперь я перехожу к соответствующему проекту с терминала.Почему git diff не работает между двумя датами?

/дом/рабочее пространство/ProjectX/

Я пытаюсь получить разницу между 2 датами с помощью следующей команды:

git diff --name-only [email protected]{2015-10-10}[email protected]{2015-11-10} > /home/results/ProjectX/Changes.txt 

Это обыкновение отображать любой результат для этого. Он показывает:

предупреждение: Вход для «хозяина» только восходит к Tue, 10 Nov 2015

Как я могу получить все различия в этом диапазоне дат?

В дополнение к этому, как Eclipse запрашивает историю с удаленного сервера. Если мы сможем запустить ту же команду с терминала, это должно сработать.

+0

Вы можете видеть журналы старше этой даты в eclipse для этого репо? Можете ли вы получить затмение, чтобы показать вам команду, в которой он работает? Я ожидаю, что он, вероятно, запустил журнал против 'origin/master' или some-such и использовал мелкий клон, когда он первоначально клонировал репозиторий. –

+0

Да. Он отображает полную историю проекта – User19792255

ответ

2

Git анализирует даты, подобные [email protected]{2015-10-10}, используя ваш рефлог, который, кажется, не возвращается, насколько вы ищете. Но, вы можете найти коммиты для этого диапазона дат в любом случае с rev-list:

git rev-list --since='2015-10-10' --until='2015-11-10' master 

Вы хотите файлы изменений между самым последним и самым старым совершить в этом списке, который мы можем получить с помощью head и tail. Я хотел бы использовать -n1 и --reverse, но --reverse применяет после-n, поэтому мы не можем.

first=$(git rev-list --since='2015-10-10' --until='2015-11-10' master | tail -1) 
last=$(git rev-list --since='2015-10-10' --until='2015-11-10' master | head -1) 
git diff --name-only $first..$last 

Настройка переменных и дублирования в rev-list чувствует себя неуклюжим, но труба у версии я могу придумать своего рода хуже. Он выбирает первый и последний коммит, преобразует новую строку в пространство с использованием tr, заменяет новое пространство .. с использованием sed, а затем передает пару на git diff.

git rev-list --since='2015-10-10' --until='2015-11-10' master | \ 
(head -n1 && tail -n1)          | \ 
tr '\n' ' '             | \ 
sed 's/ /../'             | \ 
xargs git diff --name-only 
+0

Tnx, он работал. Но была проблема, которую я не могу понять. Я пошел в соответствующую папку проекта (/ ProjectX /) и дал команду. Это дало мне результат. Но все эти изменения не в одном проекте. В той же рабочей области у меня есть другой проект. Результат дает мне, что проект изменил файлы. Он не содержит файлов projectX. Но есть и небольшие изменения. – User19792255

+0

Tnx это сработало. Это было что-то еще. Tnx для решения. – User19792255

Смежные вопросы