Оформить заказ на один файл, чтобы сохранить историю - PullRequest
0 голосов
/ 22 мая 2019

Моя цель заключается в создании нового репозитория github, содержащего несколько файлов из репо, которые я разветвил (а затем фактически разветвил в своем собственном github, используя http://deanmalone.net/post/how-to-fork-your-own-repo-on-github/

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

Итак, я попытался сделать редкий заказ

git init
<set remote>
git fetch
git checkout origin/master -- python/file.py

но это создает python/file.py, а не file.py, что мне и нужно. Я, очевидно, не могу скопировать файл, потому что это та же проблема, что я обнаружил в начале.

Я вижу два варианта, но не нашел, как достичь либо

  • есть ли способ сохранить python/demo.py в текущем каталоге, используя git checkout или каким-либо другим способом, которого я не нашел? (git archive не будет работать)
  • можно ли установить новый удаленный URL из подкаталога? то есть перейдите на python, а затем установите пульт так, чтобы только file.py фиксировалось в моем репо?

1 Ответ

1 голос
/ 22 мая 2019

В Git история равна коммитам;коммиты являются историей.Не существует такой вещи, как «история файлов».

Это правда, что git log -- somefile.py показывает историю, которая влияет на somefile.py.Но способ , который он делает, заключается в том, чтобы посмотреть на все коммиты, начиная с текущего, работая в обратном направлении по одному коммиту за раз.При каждом коммите это дифференцирует родительский коммит против этого коммита.Изменился ли somefile.py между родителем и ребенком?Если это так, выведите коммит.Если нет, ничего не печатайте.В любом случае переходите к родительскому коммиту.

(При коммитах слияния, которые по определению имеют более одного родителя, дела обстоят немного сложнее. Здесь Git по умолчанию следует следующему родителю не change somefile.py.)

Если вы добавите --follow к вашему git log, Git делает еще одну вещь: когда он сравнивает parent и child, он проверяет, является ли diff от parent к childговорит, что файл был переименован .Если это так, как только он перемещается к родителю, он начинает искать old name файла.Но вы все еще просматриваете некоторое подмножество истории commit во всех случаях.Если у вас есть коммиты, Git рассмотрит их и напечатает некоторые из них.Если у вас нет коммитов, у вас нет истории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...