Я хотел бы избежать вызова фарфоровых команд из своих сценариев, но есть ли способ получить поведение git checkout <commit>
, используя только команды сантехники, такие как checkout-index
? Меня особенно интересует влияние на рабочую копию: при условии, что все чисто, checkout
удаляет файлы, которые отслеживались в старой HEAD и отсутствовали в новой. checkout-index
, похоже, не имеет представления об удалении файлов. Самое близкое, что я могу придумать, это позвонить
git diff-tree -p <old> <new> | git apply
но вычисление всего diff кажется излишне дорогим. Есть ли способ лучше?
git checkout ...
? - person Oliver Charlesworth   schedule 24.07.2014checkout
может удалять игнорируемые файлы, а я хочу этого избежать (повышение безопасности). Но я хочу проложить удаленные файлы (снижение безопасности), не используя--force
для прокладки всего. Это часть скрипта, который использует git под прикрытием для хранения деревьев файлов, иcheckout
очень близко к тому, как я хочу, чтобы мой скрипт вел себя, но не совсем. Я подумал, что если бы я мог получитьcheckout
с помощью сантехнических команд, я мог бы настроить его оттуда, хотя, пожалуйста, дайте мне знать, есть ли другой способ получить этот элемент управления. - person Jack O'Connor   schedule 24.07.2014diff-tree
работает медленно?checkout
в основном различает все, чтобы понять, что делать в первую очередь. (Конечно,checkout
не создает патчи, а затем не применяет их, и, вероятно, вам не следует этого делать.) - person Edward Thomson   schedule 24.07.2014diff-tree
, вероятно, то, что я хочу, но я не уверен, во что передать его вывод. Есть ли способ применить этот diff к рабочей копии, кроме хакаgit apply
выше? Было бы достаточно просто написать скрипт на Python, который брал бы список удалений и фактически выполнял их, но я боюсь, что это будет медленно. - person Jack O'Connor   schedule 24.07.2014