2016-04-17 6 views
2

У меня есть репозиторий Git, и я хотел бы посмотреть, как файл просматривает конкретную фиксацию.Специфическая версия файла Git для конкретной папки

Чтобы получить все фиксации файла, я использую git log [filepath]. С помощью git-журнала приложение извлекает коммиты и их значения SHA.

Что является/является командой Git для извлечения файла определенной фиксации?

Таким образом, в псевдокоде:

  1. Получить все коммиты файла (уже реализован)
  2. Retrieve файл коммитом ША
  3. Экспорт файла в определенной папке.

Я уже пробовал:

git show [SHA OF COMMIT] -- [REPODIRECTORY] 
git show [SHA OF COMMIT]:[FILEPATH] > [NEW LOCATON] 

Это дало:

Error: fatal: Path 'D://Test//FolderName//FolderName//MyTestFile.cs' exists on disk, 
but not in 'a2f3f51ee27d5711d2974f0256b4eed0b3225d44'. 

ответ

2

git show [SHA OF COMMIT]:[FILEPATH] > [NEW LOCATON] должен быть г синтаксис.

Но [FILEPATH] должен быть path from the root of the repo, а не абсолютный путь к файлу с диска ведущего диска.

От gitrevisions man page:

<rev>:<path>, e.g. HEAD:README, :README, master:./README 

A suffix : followed by a path names the blob or tree at the given path in the tree-ish object named by the part before the colon.
:path (with an empty part before the colon) is a special case of the syntax described next: content recorded in the index at the given path.
A path starting with ./ or ../ is relative to the current working directory. The given path will be converted to be relative to the working tree’s root directory.


В вашем случае:

cd /d D:\Test\MyRepoFolder 
git show a2f3f51ee27d5711d2974f0256b4eed0b3225d44:test.css > anotherpath\test.css 

Вы бы использовать :test.css, не :D://... (абсолютный путь к файлу).
Корень репо "D:\Test\MyRepoFolder".
Следовательно, путь к доступу test.css должен относиться к этому корню.

В экземпляре OP точный путь к файлу был ReactiveUI\afile, а репо было в D:\Test\ReactiveUI, что немного путаницы.

Даже если корневая папка была названа ReactiveUI, команда использовать было:

git show <sha1>:ReactiveUI/afile 

(с '/', не '\', как это интерпретируется мерзавца Баш Linux)

То есть, «путь относительно корневой папки репо».

Примечание: класс ProcessInfo, используемый ОП, не поддерживает «>».
Экспорт вывода команды git должен выполняться программно.

+0

Приложение все еще извлекает: «fatal: Path» D: // Test // REPOFOLDER // существует на диске, но не в 'a2f3f51ee27d5711d2974f0256b4eed0b3225d44'. «Как решить эту проблему? – Odrai

+0

@Odrai Какую именно команду вы набрали? Какую версию git вы используете ('git -version')? – VonC

+0

Git версия 2.8.1.windows.1 и команда: «показать a2f3f51ee27d5711d2974f0256b4eed0b3225d44: D: // Test // MyRepoFolder //> test.cs" – Odrai

Смежные вопросы