相关疑难解决方法(0)

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

我正在使用包含大量文件的存储库,这需要几个小时才能结账.我正在研究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稀疏结帐中重新出现?

我使用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 sparse-checkout

13
推荐指数
1
解决办法
4500
查看次数

“git ls-files”究竟做了什么,我们如何从中删除文件?

它是否显示来自本地存储库、临时存储库、远程存储库或其他地方的文件?

我经常看到“git ls-files”中存在的文件。该文件已从远程存储库中删除。之后我尝试做一个 git pull 。但是,该文件仍显示在此命令列表中。它不应该出现在这里,因为它也不存在于远程存储库中。

git

9
推荐指数
1
解决办法
4698
查看次数

为什么`git describe -dirty`在描述干净的结账时添加了`-dirty`后缀?

我刚刚发现了一个--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没有在给出文档时,似乎做了我期望的事情:

   --dirty[=<mark>]
       Describe the working tree. It means describe HEAD and appends
       <mark> (-dirty by …
Run Code Online (Sandbox Code Playgroud)

git git-describe

8
推荐指数
1
解决办法
7071
查看次数

稀疏结账——它是如何运作的

我一直在寻找一种方法来仅克隆我的一个项目的子目录。显然我找到了这个答案。它设计精良,分步解决方案很好地解释了如何实现这一点。现在最后它引用了这样的文档:

“稀疏签出”允许稀疏地填充工作目录。它使用skip-worktree位(参见git-update-index(1))来告诉Git工作目录上的文件是否值得查看。

我的问题是我无法理解这意味着什么。我从 Git 中学到的一件事是,它是一个很棒的工具,但在实施某些操作之前,了解幕后发生的事情从长远来看确实可以帮助您。

所以,问题是:

稀疏结帐如何工作以及输出是什么?

git version-control git-sparse-checkout

3
推荐指数
1
解决办法
6560
查看次数