Поместите только те файлы, которые содержат определенные изменения в Git - PullRequest
3 голосов
/ 01 марта 2012

Я хочу перейти на более новую версию CMS, разработка которой отслеживается в Git.Поскольку обновление CMS происходит в новом году, каждый файл получает дату изменения авторского права с 2011 по 2012 год.

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

- * @copyright  Copyright (c) 2008 - 2011, EllisLab, Inc.
+ * @copyright  Copyright (c) 2008 - 2012, EllisLab, Inc.

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

Эта цель может быть достигнута двумя возможными способами:

  1. Подготовьте и передайте только те файлы, которые содержат это изменение.
  2. Подготовьте и передайте только это изменение из всех файлов.

Возможно ли это?Заранее спасибо!

Ответы [ 2 ]

3 голосов
/ 16 мая 2012

Мне недавно пришлось сделать именно то, что нужно для обновления Magento. 90% изменений были просто обновлены строки авторских прав. Итак, я разобрался в следующем «однострочнике».

git diff -G '@copyright.*[Cc]opyright' --name-only | xargs -I {} sh -c 'FILE={} ; [ $(git diff -U0 -- $FILE | wc -l | tr -d " " | cut -f1-) -eq 7 ] && git add $FILE'

Если вы хотите быть в безопасности и проверить сначала, измените последнюю часть на 'echo git add $ FILE', чтобы она выводила только команду.

1 голос
/ 07 марта 2012

Боюсь, я ответил в обратном порядке, но ...

2 Этап только те строки:

 git add --patch

Это довольно ручной метод, поэтому, возможно, это экономит некоторое время, позволяя просматривать только те из них, у которых есть соответствующие изменения,

for i in $(gd -SYOURCHANGESTRING | sed -rn 's/^diff --git a\/(\S+).*$/\1/p'); do git add --patch "$i"; done

1 Поместите ВСЕ эти файлы с измененной строкой.

Примерно так:

git diff -SYOURCHANGESTRING | sed -rn 's/^diff --git a\/(\S+).*$/\1/p' | xargs -n1 git add
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...