Как я могу обновить одно дерево исходников из другого?

218
Flyk

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

Существующее дерево исходников имеет множество скрытых подкаталогов (.git), которых нет в новом дереве исходников.

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

1
Я предполагаю, что вы на Linux? John T 14 лет назад 0
да (на Mac OSX) 14 лет назад 0

1 ответ на вопрос

1
John T

Первое, что приходит на ум, это rsync :

rsync -va / путь / к / новому / дереву / / путь / к / существующему / дереву

Слева на первом пути жизненно важно. Без этого treeбудет создана новая папка, в которой будет создан /path/to/existing/treeпуть /path/to/existing/tree/tree.

Эта команда обновит файлы в существующем дереве с файлами из нового дерева.

это работает, но не совсем так, как я ожидал. Я пробовал rsync -va new / / old, который почти работает, но он не копирует каталоги .git из старых в новые, возможно, лучший способ описать то, что я пытаюсь достичь, - это слияние, когда одной стороне предоставляется приоритет когда один и тот же файл отличается в обоих местах. Я хочу, чтобы файлы, которые были только в старых или только в новых, были в результате слияния. 14 лет назад 0
в конечном итоге использовать инструмент kdiff3 (http://kdiff3.sourceforge.net/), чтобы объединить вещи 14 лет назад 0
Вы также можете использовать ключ incync --include-from, чтобы прочитать файл папок для включения. Таким образом, вы можете синхронизировать все папки .git от старых к новым. Чтобы найти все папки .git в папке old и поместить их в файл, вы можете использовать `find / full / path / to / old -type d -name" .git "> gitfolders.txt`. Теперь мы можем использовать этот файл для синхронизации только папок .git с новыми: `rsync -va --include-from 'gitfolders.txt' old / new`. John T 14 лет назад 0

Похожие вопросы