Я думаю, вы имеете в виду, что master
предполагается неизменным, и вы хотите скопировать версию develop
в свой третий каталог. (Я не уверен в этом; попросил разъяснений в комментариях. Если что-то другое, я обновлю, как только у нас будет разъяснение.)
Обновите свой комментарий ниже:
Во-первых, вы не ответили на запрошенное мной разъяснение. Итак, я продолжаю предполагать, что вам нужны develop
версии файлов, которые отличаются. Пока неясно, что вы хотите делать, если файл будет удален или переименован; поэтому рекомендации, которые я давал ранее по этому вопросу, остаются неизменными.
1) Вы сказали
Я клонировал эти 2 ветки в отдельные каталоги в рабочем пространстве Jenkins.
Да, и, как я сказал ранее, это не похоже на хорошее использование ресурсов. Как я уже сказал, вам, вероятно, не нужно извлекать оба, и даже если вы это сделаете, было бы более эффективно использовать git worktree
вместо создания двух полных репозиториев.
2) Вы сказали
поскольку я создал или добавил несколько файлов в каталог в ветке разработки, я хочу вытащить только те файлы, которые я изменил, вместо того, чтобы тянуть все остальное в третий каталог
Это то, что делает исходный ответ.
3) Вы сказали
а также я хотел бы вытащить все файлы только без журналов .git.
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 --
person
Mark Adelsberger
schedule
31.05.2018
master
? Версияdevelop
? Слитная версия с изменениями от обоих? - person Mark Adelsberger   schedule 31.05.2018