tl; dr; Я хочу сохранить историю для файлов, перенесенных в git, включая историю из более ранних интеграций. т.е. git p4 clone
таким образом, что git log --all --follow <file>
== p4 filelog -li <file>
git p4 история клонов, включая историю интеграции
Longer версия:
У меня есть проект в perforce
, который включает в себя файлы, которые были перемещены и скопированные вокруг других проектов в reposotory в прошлом.
p4 filelog -l <file2>
показывает историю для файла (-l для длинной формы) в его текущем положении. Файлы перемещаются (копируются) с помощью p4 integrate
, например.
p4 integrate <file1> file2>
Чтобы увидеть историю до переезда вы используете:
p4 filelog -li <file2>
Эквивалент git
команда:
git log --follow <file2>
Теперь, если я клонировать часть проекта perforce
с помощью:
git p4 clone //depot/some/path/[email protected] .
Я получаю полную историю для файла, как и для того же файла, в текущем каталоге в perforce
.
(Вы получаете одну фиксацию для файла в настоящее время не @all
см Getting the whole files history with git-p4)
Как получить git log --follow <file2>
, чтобы дать мне всю историю, что я видел с p4 filelog -li
?
Вы можете заметить, что история файлов менее полезна сама по себе, чем история репозитория. Например, одиночный файл может даже не компилироваться без других файлов в правильной версии в правильном относительном местоположении. Однако полное хранилище perforce
содержит историю многих других несвязанных проектов, которые не должны включаться в репозиторий git. Я не хочу, чтобы обрезка хранилища или истории прививок была долгим болезненным процессом (относительно нова к git
и хочу избежать темных углов на данный момент).
Что нужно сделать, чтобы добавить опцию к git p4 clone
, которая скопировала историю файлов через интеграцию, чтобы --follow работает?
Это очень похоже на git p4: migrate full history - including integration history
В отличие от этого вопроса я всегда переехал файлы в хранилище с использованием p4 интеграции так история файл, записанный по необходимости цела. Это должно облегчить мою задачу. Хотя я не уверен, что это происходит на практике.
По существу, Perforce записывает больше информации о работе, которую вы сделали, чем git. Есть действия, которые вы, возможно, приняли, что git просто не может представить. Почему бы вам просто не оставить свой сервер Perforce онлайн, чтобы вы могли проконсультироваться с ним для исторического анализа в будущем, даже после того, как ваша новая работа будет совершена в git? –
git может представлять deltas для файлов, в которых ему просто нужно место для файла. Я разрешу, что местоположение не может быть правильным, если местоположение находится в дереве, которое не существует в git repo, но предположительно мы можем подделать файл как находящийся в местоположении, которое (например, в ветке). –
Целью перехода некоторого кода в git было бы открыть исходный код, оставив при этом закрытый источник репо. Таким образом, внешние пользователи git не будут иметь к нему доступа. –