特定Git文件版本到特定文件夹

时间:2016-04-17 13:05:28

标签: git

我有一个Git存储库,我想看一个文件如何查看特定的提交。

因此,要检索文件的所有提交,我使用的是git log [filepath]。 使用git log,应用程序将检索提交及其SHA值。

用于检索特定提交文件的Git命令是什么?

所以在伪代码中:

  1. 获取文件的所有提交(已实施)
  2. 检索提交SHA的文件
  3. 将文件导出到特定文件夹。
  4. 我已经尝试

    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'.
    

1 个答案:

答案 0 :(得分: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
  

后缀:后跟一个路径,命名在冒号前的部分命名的树形对象中给定路径上的blob或树。
  :path(在冒号前面有一个空的部分)是下面描述的语法的特例:在给定路径的索引中记录的内容。
  以./../开头的路径相对于当前工作目录。给定路径将转换为相对于工作树的根目录。

在你的情况下:

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

您将使用:test.css,而不是:D://...(绝对文件路径) 回购的根源是&#34; D:\Test\MyRepoFolder&#34;。
因此,访问test.css的路径应该相对于该根。

在OP的实例中,文件的确切路径为ReactiveUI\afile,并且回购邮件位于D:\Test\ReactiveUI,因此有点混乱。

即使根文件夹名为ReactiveUI,使用的命令为:

git show <sha1>:ReactiveUI/afile

(使用&#39; /&#39;,而不是&#39; \&#39;,因为它是由Linux git bash解释的)

即,&#34;相对于仓库的根文件夹的路径&#34;。

注意:OP使用的ProcessInfo课程不支持&#39; >&#39;。
git命令输出的导出必须以编程方式完成。