相关疑难解决方法(0)

如何从Git中的特定修订中检索单个文件

我有一个Git存储库,我想看看几个月前一些文件的样子.我在那个日期找到了修改版,而且它是27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8.我需要查看一个文件的外观,并将其保存到文件中.

我设法看到文件使用gitk,但它没有保存选项.我尝试使用命令行工具,我得到的最接近的是:

git-show 27cf8e84bb88e24ae4b4b3df2b77aab91a3735d8 my_file.txt
Run Code Online (Sandbox Code Playgroud)

但是,此命令显示diff而不是文件内容.我知道我以后可以使用类似的东西PAGER=cat并将输出重定向到文件,但我不知道如何获得实际的文件内容.

基本上,我正在寻找类似svn cat的东西.

git single-file

789
推荐指数
9
解决办法
35万
查看次数

417
推荐指数
15
解决办法
49万
查看次数

是否可以在不先检查整个存储库的情况下进行稀疏检出?

我正在使用包含大量文件的存储库,这需要几个小时才能结账.我正在研究Git是否能够很好地使用这种类型的存储库,因为它支持稀疏检出,但我能找到的每个示例都执行以下操作:

git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD
Run Code Online (Sandbox Code Playgroud)

这个命令序列的问题是原始克隆也执行结帐.如果将-n添加到原始克隆命令,则read-tree命令会导致以下错误:

错误:稀疏结账不会在工作目录上留下任何条目

如何在不先检出所有文件的情况下进行稀疏结账?

git

159
推荐指数
12
解决办法
11万
查看次数

使用Git和Mercurial进行部分克隆

是否有可能只在Git和Mercurial中克隆一个分支(或来自给定的提交)?我的意思是,我想要克隆一个中央回购,但由于它很庞大,我只想获得它的一部分,并且仍能够回馈我的变化.可能吗?比如,我只想从Tag 130开始或类似的东西?

如果是这样,怎么样?

git mercurial

73
推荐指数
4
解决办法
3万
查看次数

在Git 1.7.0中稀疏结账?

使用Git 1.7.0中新的稀疏结账功能,是否可以像在SVN中一样获取子目录的内容?我找到了这个例子,但它保留了完整的目录结构.想象一下,我只想要'perl'目录的内容,而没有名为'perl'的实际目录.

- 编辑 -

例:

我的git存储库包含以下路径

repo/.git/
repo/perl/
repo/perl/script1.pl
repo/perl/script2.pl
repo/images/
repo/images/image1.jpg
repo/images/image2.jpg
repo/doc/
repo/doc/readme.txt
repo/doc/help.txt
Run Code Online (Sandbox Code Playgroud)

我想要的是能够从上面的存储库中生成这种布局:

repo/.git/
repo/script1.pl
repo/script2.pl
Run Code Online (Sandbox Code Playgroud)

然而,使用当前的稀疏结账功能,似乎只能获得

repo/.git/
repo/perl/script1.pl
repo/perl/script2.pl
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.

git version-control sparse-checkout

68
推荐指数
4
解决办法
4万
查看次数

从已有的repo子目录创建新的git repo

我想从已经存在的repo的子文件夹创建一个单独的repo.

将(移动)子目录分离到单独的Git存储库中就可以显示出来.但是,我无法用它获得一个干净的回购.我最终遇到了新回购的两个问题:

  1. 历史似乎重复;
  2. 我不能保持分支机构的历史.

这是我做的:

$ git clone ssh://.../repo.git
$ cd repo
$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
$ git reset --hard
$ git gc --aggressive
$ git prune
Run Code Online (Sandbox Code Playgroud)

在此之后,我似乎拥有了回购和新历史的原始历史.我输入"git log --all --graph"(或gitk --all)我看到,作为第一个提交,第一个repo的初始提交.然后,图表显示原始repo的完整历史记录,直到最后一次提交.然后,我在第一个上面有一个SECOND历史,显示了我想要的子文件夹的历史.但在历史的那一部分,我只有"主人",没有分支/合并.

"git log",gitk或gitg都只显示"flatten"历史记录:它们不会在子文件夹的展平历史之前显示初始回购的历史记录.

我尝试使用"filter-branch"命令,克隆生成的repo(使用--no-hardlinks),使用:

$ git filter-branch --subdirectory-filter subdirectory -- --all
Run Code Online (Sandbox Code Playgroud)

代替:

$ git filter-branch --subdirectory-filter subdirectory HEAD -- --all
Run Code Online (Sandbox Code Playgroud)

但结果相同.

我做错了什么或者git坏了吗?我真的没有想法......使用git 1.7.6.谢谢.

编辑:我认为问题可能来自于filter-branch忽略了merge提交的事实,因此给出了没有分支或合并的平面历史记录......

git

11
推荐指数
1
解决办法
4405
查看次数