- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个包含小型 git 存储库的目录。
git status 和 gitk --all,显示没有未提交的更改。
如果我用 tar/compress 这个目录:
tar czf git-repo.tar.gz git-repo/
然后将此 tar 文件传输到测试目录并使用以下命令解压缩:
tar xzf git-repo.tar.gz
当我
cd 测试/git-repo/
gitk --all
gitk 在所有提交的顶部显示一行(带有通常的红点):
“本地未提交的更改,未 checkin 索引”
git 状态仍然显示:
在分支 master 上
没有什么可提交的,工作树干净
测试差异:
diff -r git-repo/test/git-repo/
没有差异。
如果我运行 git clean,这一行就会消失。
我已经尝试过 git clean -i
希望看到一个有问题的文件名,但是它在没有要求交互式确认干净的情况下完成。此后 gitk 显示没有未提交的更改。
我正在运行:git 版本 2.11.0
向客户解释“为什么有未提交的更改?”有点复杂。当实际上没有时。
感谢您的任何见解...
最佳答案
gitk
正在查看索引中的缓存信息,以确定您的工作目录是否脏了。索引存储有关当前工作目录状态的信息,因此不需要分析文件。
当您运行 git status
时,它会将 HEAD
的内容与索引的内容进行比较,以显示分阶段的更改。这简单快捷;如果文件的 ID 不同,则其内容必须不同。但是,确定文件是否具有未暂存 更改的计算成本更高。该文件必须计算其 SHA1,然后与索引中的值进行比较。
为了避免这种昂贵的计算,git 在索引中缓存有关工作目录内容的 struct stat
信息:
README.md
ctime: 1516120578:638662531
mtime: 1516120578:638662531
dev: 16777220 ino: 1752439
uid: 501 gid: 20
size: 13224 flags: 0
现在,当您运行 git status
时,它只能stat
工作目录的内容。如果任何文件具有相同的大小、inode、ctime、mtime 等,则 git 会假定该文件没有更改。这允许 git status
在文件未更改时保持性能。但是,如果任何文件具有不同 值,那么它将对该文件进行哈希处理。如果文件具有相同 哈希值(即,您只是在文件上运行touch
而没有更改内容),那么索引将使用新的缓存信息进行更新。如果您确实更改了文件,则 git status
将报告未暂存的更改。
gitk
然而,它不会对文件进行哈希处理以确定它是否真正 更改了。你可以通过一个简单的例子自己看到这一点。这里我有一个包含一个文件的存储库,foo
,没有任何更改。
如果我在命令行上触摸文件,更新它的时间戳:
% touch foo
现在,gitk 报告我的存储库有未提交的更改:
但是,如果我在命令行中再次运行git status
,它会更新索引中的缓存信息,现在gitk
就会明白,确实有不是任何未暂存的更改:
当您使用工作目录解压缩存储库时,您将在磁盘上放置一个与索引中的缓存信息不匹配的工作目录。 git
实际上会重新散列内容以确定您的工作目录实际上不是脏的,但 gitk
不是。
复制 git 存储库和工作目录通常不是一个好主意;一般来说,您应该 checkout 一个新的工作目录。
关于git - git repo 的 tar/untar 之后,gitk 显示 "Local uncommitted changes, not checked in to index",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49990403/
这似乎是一个非常简单的问题,但对于我来说我无法弄清楚。 我想做的就是解压缩并提取 tar.gz 文件的内容。在 godoc 上,似乎有一个函数的引用正是这样做的。 (https://godoc.org
不久前,我使用 Linux“tar -cf”命令压缩了一个应用程序。当时一些文件名使用的是不同的语言。 现在,当我使用“tar -xf”解压缩时,它会将另一种语言的文件名显示为问号。 有没有办法在我解
我正在编写一个 iPhone 应用程序,它从网络服务器下载一个 tar-gzip 压缩文件,然后需要解压该文件,以便将其复制到应用程序的 Documents 文件夹中。 我使用 tar/gzip 是因
我是 R 编程语言的新手,并且遇到了一些基本问题。我想解压缩一个文件,但它对我不起作用。 这是我输入的代码: untar("CD_data.tar", exdir="data") 然后它返回以下错误消
如何在不使用 exec('tar') 或任何其他命令的情况下使用纯 PHP 在 php 中解压缩文件? 我的问题如下;我有一个 26mb 的 tar.gz 文件需要上传到我的服务器并解压缩。我试过用n
我想要执行与此 shell 脚本等效的操作: ssh visarend.solasistim.net tar -c /home/amoe/episodes | tar -vx - 但是使用 Fabri
我目前正在将 CVS 存储库转换为多个 git 存储库。 cvs2git 进程很好,但是我在运行 filter-branch 命令时遇到了问题。我使用简单的脚本测试命令,因为主存储库大小为 4Go,提
情况是这样的。我有一个需要提取和设置的 URL 列表。它都是变量驱动的,但在我提取后,我不知道我的文件夹将被称为什么。如果我不知道它叫什么,我就不能 CD 进去。 $DL_DIR = /opt/ $U
尝试安装 Bower 时出现此错误。这是一个错误还是我做错了? 如果需要,我还有 4707 行 npm-debug.log 文件... 谢谢! 这是尝试在本地安装 Bower 时终端的转储,但我在全局
我正在从 USGS 订购一大堆陆地卫星场景,这些场景作为 tar.gz 存档。我正在编写一个简单的 python 脚本来解压缩它们。每个文件包含 15 张大小为 60-120 MB 的 tiff 图像
我在 EC2 Linux AMI 实例上尝试使用 CPAN 安装各种 CPAN 模块。从典型安装开始(YAML 只是一个示例)... sudo yum install perl-CPAN Packag
我在 Mac 上创建了一个新用户并尝试了此操作。这通常适用于我的其他帐户。这个新用户也是管理员。 npm ERR! tar.unpack untar error /Users/test/.npm/
我有一个包含小型 git 存储库的目录。 git status 和 gitk --all,显示没有未提交的更改。 如果我用 tar/compress 这个目录: tar czf git-repo.ta
我是一名优秀的程序员,十分优秀!