2013-02-16 2 views
0

Я хотел бы попробовать несколько вещей с git, и я не хочу ничего вносить в рабочий репозиторий.Выполняет ли копирование Git bare-repo изменение журнала?

Чтобы попытаться сохранить все в безопасности, я сделал копию открытого репо, из которого я работаю, и из этого репо. Я намереваюсь делать все мои нажатия и пометки. Я использовал:

cp --preseve -r original.git copy_of_original.git 

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

Проблема заключается в том, я выполнить следующее:

git diff --name-only [email protected]{"5 day ago"} master 

и получить обратно:

warning: Log for 'master' only goes back to Fri, 15 Feb 2013 20:42:43 -0500. 

оригинальный репо, которые я не хочу трогать, действительно есть файлы, которые были изменен на 5 дней назад.

Если я выполняю git log на моем скопированном репо, запись этих 5-дневных изменений все еще есть.

Что здесь происходит?

Есть ли лучший способ сделать независимую копию хранилища?

Update 1

я понял, что я был неточным с моим вопросом. Я побежал:

git diff --name-only [email protected]{"5 day ago"} 

в каталоге производится из:

git clone copy_of_original.git clone_of_copy 

ответ

1

Синтаксис @{5 days ago} опирается на информацию от reflog, так как объясняется в разделе документации git-rev-parse, приведенной ниже. Reflogs являются локальными для репозитория и никогда не переносятся с помощью clone, fetch или push. Это не информация, отображаемая git log, если не используется опция -g или --walk-reflogs.

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

<refname>@{<date>}, e.g. [email protected]{yesterday}, [email protected]{5 minutes ago} 
    A ref followed by the suffix @ with a date specification enclosed in a brace pair 
    (e.g. {yesterday}, {1 month 2 weeks 3 days 1 hour 1 second ago} or {1979-02-26 
    18:30:00}) specifies the value of the ref at a prior point in time. This suffix may 
    only be used immediately following a ref name and the ref must have an existing log 
    ($GIT_DIR/logs/<ref>). Note that this looks up the state of your local ref at a 
    given time; e.g., what was in your local master branch last week. If you want to 
    look at commits made during certain times, see --since and --until. 
+0

Тогда, если я сделаю 'git pull' на моей локальной копии репозитория, будет результат запуска' git diff --name-only master @ {"5 дн. назад"} ' использовать дату, которую я делал «git pull», а не когда делали люди? – EMiller

+0

'@ {time}' никогда не использует время фиксации. Не существует способа, который мог бы работать в целом, поскольку в истории может быть несколько ветвей, и коммиты не всегда находятся в порядке дат (либо из-за переупорядочения коммитов, либо с некорректным набором часов). – qqx

+0

Но разве нет способа надежного запроса, если какие-либо файлы в master были обновлены через слияние или фиксацию с периода времени? – EMiller

0

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

Так что рекурсивная копия прекрасна.

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

0

Если вы клона только часть материала копируются, если вы копия, у вас есть идентичная версия исходного репозитория. Это отлично работает с git; может делать резервную копию и восстанавливать и т. д.

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