我正在使用包含大量文件的存储库,这需要几个小时才能结账.我正在研究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命令会导致以下错误:
错误:稀疏结账不会在工作目录上留下任何条目
如何在不先检出所有文件的情况下进行稀疏结账?
我使用GCC git镜像,因为我只使用C和C++前端,我使用git的稀疏checkout功能来排除我不需要的数百个文件:
$ git config core.sparseCheckout
true
$ cat .git/info/sparse-checkout
/*
!gnattools/
!libada/
!libgfortran/
!libgo/
!libjava/
!libobjc/
!libquadmath/
!gcc/ada/
!gcc/fortran/
!gcc/go/
!gcc/java/
!gcc/objc/
!gcc/objcp/
!gcc/testsuite/ada/
!gcc/testsuite/gfortran.dg/
!gcc/testsuite/gfortran.fortran-torture/
!gcc/testsuite/gnat.dg/
!gcc/testsuite/go.dg/
!gcc/testsuite/go.go-torture/
!gcc/testsuite/go.test/
!gcc/testsuite/objc/
!gcc/testsuite/objc.dg/
!gcc/testsuite/obj-c++.dg/
!gcc/testsuite/objc-obj-c++-shared/
Run Code Online (Sandbox Code Playgroud)
这工作了一段时间,但后来我发现其中一些被排除的文件已经返回,有时很多:
$ ls gnattools/
ChangeLog configure configure.ac Makefile.in
$ ls gcc/fortran/ | wc -l
86
Run Code Online (Sandbox Code Playgroud)
我不确定文件何时重新出现,我做了很多切换到不同的分支(远程跟踪和本地),这是一个非常繁忙的回购,所以有新的变化经常拉.
作为git的相对新手,我不知道如何"重置"我的工作树以再次摆脱这些文件.
作为一个实验,我尝试禁用稀疏检出和拉动,认为我可以再次启用sparseCheckout以某种方式更新树,但这不能很好地工作:
$ git config core.sparseCheckout false
$ git config core.sparseCheckout
false
$ git pull
remote: Counting objects: 276, done.
remote: Compressing objects: 100% (115/115), …Run Code Online (Sandbox Code Playgroud) 它是否显示来自本地存储库、临时存储库、远程存储库或其他地方的文件?
我经常看到“git ls-files”中存在的文件。该文件已从远程存储库中删除。之后我尝试做一个 git pull 。但是,该文件仍显示在此命令列表中。它不应该出现在这里,因为它也不存在于远程存储库中。
我刚刚发现了一个--dirty选项git describe,它看起来应该做一些非常有用的东西,即git describe在工作树变脏时将输出附加一个后缀,但是在我的一些存储库中似乎不是这样的:
$ git status
# On branch 8.30
nothing to commit (working directory clean)
$ git describe --dirty
8.30rel-8-g9c1cbdb-dirty
Run Code Online (Sandbox Code Playgroud)
我认为这可能是因为工作目录相对于标记是脏的,但似乎也不是这种情况:
$ git status
# On branch 1.4
nothing to commit (working directory clean)
$ git describe --tags --dirty --long
1.4rel-0-gfedfe66-dirty
Run Code Online (Sandbox Code Playgroud)
我过去hg id常常使用Mercurial并且喜欢它的默认行为是为+它为脏存储库报告的任何提交哈希添加后缀这一事实,所以一直在寻找git等价物,但是git describe --dirty没有在给出文档时,似乎做了我期望的事情:
Run Code Online (Sandbox Code Playgroud)--dirty[=<mark>] Describe the working tree. It means describe HEAD and appends <mark> (-dirty by …
我一直在寻找一种方法来仅克隆我的一个项目的子目录。显然我找到了这个答案。它设计精良,分步解决方案很好地解释了如何实现这一点。现在最后它引用了这样的文档:
“稀疏签出”允许稀疏地填充工作目录。它使用skip-worktree位(参见git-update-index(1))来告诉Git工作目录上的文件是否值得查看。
我的问题是我无法理解这意味着什么。我从 Git 中学到的一件事是,它是一个很棒的工具,但在实施某些操作之前,了解幕后发生的事情从长远来看确实可以帮助您。
所以,问题是:
稀疏结帐如何工作以及输出是什么?