签出单个文件,以便保留历史记录

时间:2019-05-22 17:56:53

标签: git github

我的目标是创建一个新的github存储库,其中包含我已分叉的存储库中的一些文件(然后使用http://deanmalone.net/post/how-to-fork-your-own-repo-on-github/

在我自己的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吗?即将cd插入python,然后设置遥控器,以便仅将file.py提交到我的仓库中?

1 个答案:

答案 0 :(得分:1)

在Git中,历史记录提交;提交历史记录。没有“文件历史记录”之类的东西。

git log -- somefile.py确实向您显示了影响somefile.py的历史记录。但是方法这样做是为了查看 all 所有提交,从当前提交开始,一次回退一个提交。在每次提交时,它会将 parent 提交与该提交进行比较。 somefile.py在父母与孩子之间有变化吗?如果是这样,请打印提交。如果没有,则不打印任何内容。无论哪种情况,都继续执行父提交。

(在合并提交时会遇到一些棘手的问题,根据定义,该提交具有多个父对象。在这里,Git默认遵循以下任何父对象没有更改somefile.py。)

如果将--follow添加到git log,Git会做一件事:当它比较父级和子级时,它会检查父级和子级之间的差异是否表示文件是重命名。如果是这样,则移至父级后,它将立即开始寻找文件的 old 名称。但是,在所有情况下,您仍在查看 commit 历史记录的某些子集。如果有提交,Git将查看它们并打印其中一些。如果没有提交,则没有任何历史记录。