Я думаю, вы имеете в виду, что master
предполагается неизменным, и вы хотите скопировать версию develop
в свой третий каталог.(Я не уверен в этом; попросил разъяснений в комментариях. Если это что-то другое, я обновлю, как только у нас будут разъяснения.)
Обновите для вашего комментария ниже:
Во-первых, вы не ответили на запрос, который я запросил.Поэтому я продолжаю предполагать, что вы хотите develop
версии файлов, которые отличаются.До сих пор неясно, что вы хотите сделать, если файл удален или переименован;поэтому руководство, которое я давал ранее по этому вопросу, остается неизменным.
1) Вы сказали, что
я клонировал эти 2 ветви в отдельные каталоги в рабочем пространстве Jenkins
Да, и, как я уже говорил, это не похоже на хорошее использование ресурсов.Как я уже говорил, вам, вероятно, не нужно извлекать оба документа, и даже если вы это сделаете, было бы более эффективно использовать git worktree
вместо создания двух полных хранилищ.
2) Вы сказали
так как я сделал или добавил несколько файлов в каталог в ветви разработки, я хочу извлечь только те файлы, которые я изменил, вместо того, чтобы тянуть все остальное в третий каталог
Тоэто то, что делает оригинальный ответ.
3) Вы сказали
, а также я хотел бы получить все файлы только без каких-либо журналов .git.
A checkout
всегда только содержание.История находится в базе данных репо и дублируется, только если вы создаете несколько клонов (отсюда пункт 1 выше).
4) Вы сказали, что
я клонирую основную ветку для сравнениятолько для того, чтобы я мог различать две ветви
Опять же, вам не нужен клон для сравнения.Вам даже не нужна проверенная рабочая копия.Все это отражено в исходном ответе.
Во-первых, вы можете различать ветви, не проверяя их обе.Если вам нужны две рабочие копии для чего-то другого, это нормально, но я все равно не буду использовать их для целей создания diff.(Кроме того, звучит так, как будто вы делаете два клона всего репо; возможно, вы захотите использовать вместо него git worktree
, чтобы присоединить несколько рабочих деревьев к одному репо. Но это не имеет ничего общего с вашим вопросом...)
git diff --name-only master develop
В зависимости от того, как вы хотите обрабатывать перемещаемый / переименованный файл (или изменения, которые git может по ошибке интерпретировать как перемещаемый / переименованный файл), вы можете добавить --no-renames
вариант.
git diff --name-only --no-renames master develop
Это обеспечит отображение любого пути, связанного с изменением, тогда как без этой опции, если git думает, что fileA
было перемещено в fileB
, только fileB
будет включено в список.Если вы просто пытаетесь получить измененное подмножество каталога develop
, это может быть тем, что вы хотите ... но опять же, это зависит от того, что вы пытаетесь сделать.
Относительно этой проблемывопрос о том, как вы хотите работать с файлами, которые находятся в master
, но не в develop
.В приведенном выше примере переименования fileA
будет таким файлом;но также у вас может быть file5
, который просто был удален в ветке develop
.Хотя параметр --no-renames
(или его отсутствие) определяет, появляется ли fileA
, по умолчанию в списке будет отображаться file5
.Вы могли бы подавить это;если вы не хотите видеть имена файлов для удаленных элементов (или «перед» именами файлов для перемещенных файлов), вы можете использовать
git diff --name-only --diff-filter d master develop
(если вы попытаетесь объединить --diff-filter d
с --no-renames
,«до» имя перемещенного файла будет отображаться как удаление, а затем будет подавлено параметром diff-filter. Итак, еще раз, дело в том, что вам нужно знать, что вы хотите в своем списке.)
Теперьчтобы скопировать develop
версии перечисленных файлов в рабочее дерево, вы можете просто использовать git checkout
;и вы можете связать все это вместе с xargs
git diff --name-only --diff-filter d master develop |xargs git checkout develop --