Поэтому, работая над большим проектом компании, который требовал разбить проблему на несколько заявок, я обнаружил, что мне нужно создавать отдельные файлы diff / patch для каждого заявки, хотя я работал над одной веткой с несколькими файлами. меняется. Каждый файл исправления должен был содержать только различия для определенных c файлов, которые вы можете сделать с:
git diff master FILENAME_X FILENAME_Y FILENAME_Z (etc.)
, но это занимало довольно много времени, чтобы делать вручную для каждого файла каждый раз, когда мне нужно было сгенерировать патч, и он включает в себя возможность каждый раз забывать файлы.
Следующая команда создаст файл diff / patch из всех файлов, включенных в другой файл патча:
`cat NAME_OF_INPUT_DIFF.diff | grep "+++" | awk -F "+++ b/" '{if (NR == 1)printf "git diff master " $2; else printf " " $2}'` > NAME_OF_OUTPUT_DIFF.diff
cat NAME_OF_INPUT_DIFF.diff | grep "+++"
разбивает предыдущий diff только на строки с именами файлов, которые были добавлены / изменены, затем awk -F "+++ b/"
разбивает это на только проанализированные имена файлов, удаляя предыдущие символы. Остальное создает длинную команду git для генерации различий между указанными c файлами, а завертывание всех в обратные метки делает ее вычисляемой при выполнении. Затем > NAME_OF_OUTPUT_DIFF.diff
выводит полученный diff в файл.
В любом случае, я надеюсь, что это поможет кому-то, как это сделал я! Совершенно экономит время.