1

В отличие от Subversion, у git нет команды cp . Для файлов это не проблема: если я хочу скопировать файл a в b , я могу просто сделать:

cp -a a b
git add b

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

С Subversion я могу сделать svn cp , и он будет только копировать и добавлять файлы, которые отслеживаются Subversion. Как я могу сделать это с Git?

2 ответа2

0

Правильное решение - просто убедиться, что все неотслеживаемые файлы игнорируются в .gitignore .

В этом случае, когда вы копируете каталог с помощью cp -Ra d e и запускаете git add e для копирования, git будет достаточно умен, чтобы избежать добавления файлов, которые он игнорирует.

-1
  1. Найдите хэш дерева "d" (git ls-tree HEAD d)
  2. git read-tree -u --prefix = e tree-hash

Готово!

git read-tree позволяет вам заменить ваш индекс или (как в данном случае) его поддерево на любой объект дерева, о котором вы знаете хеш. -u потом проверяет поддерево из индекса (как если бы вы сделали git checkout -- e). Для получения дополнительной информации о древовидных объектах и индексе, пожалуйста, обратитесь к книге Pro Git.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .