问题标签 [git-index]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
git - Git commit -a 将所有文件显示为已删除
我相信有些人可能遇到过类似的问题。
突然,当我执行 git commit -a 时,它指出我的所有文件都已删除,我需要重新添加它们。
根据这里的一些讨论,它看起来可能与 .git/index 被搞砸有关
我尝试删除 .git/index 文件,然后执行 git reset --hard HEAD 但无济于事。
我还能做些什么来摆脱这种糟糕的情况而不必重新克隆?我知道擦除我的整个回购并重新克隆会起作用,但是每次遇到这种情况时都必须这样做非常麻烦。
我确实使用 IntelliJ 来处理我的 repo,它有可能弄乱我的 git 索引吗?
谢谢
git - git 索引中的 ctime 和 mtime 是做什么用的?
第一次将文件添加到索引时,文件的创建时间戳存储在索引记录中ctime
,文件当前修改的时间戳存储在mtime
字段中。
在更改后添加文件mtime
时,将使用文件的当前时间戳进行更新。
当文件被签出时,它不使用mtime
git 世界中这些时间戳的用途是什么?
查看对索引的引用,它们似乎就在那里。也许他们有一些从未实现过的未来目标?
git - 了解 git reset 对索引的影响
在阅读有关 git reset 的文档/教程时,我遇到了一个小冲突:git reset --mixed
例如,文档说:
reset 的下一件事是使用
HEAD
现在指向的任何快照的内容更新索引
导致我的冲突的原因是我期望清除索引而不是更新索引。HEAD
是否使用现在指向的任何快照清除或更新索引?
git - diff 不包含新文件
我正在做一个使用 git 的项目。每当我进行更改时,我都会向应用并提交它的主要开发人员提交一个补丁。到目前为止,事情进展顺利:
但是当我创建新文件时,上面的命令不起作用。它会创建一个不包含我创建的新文件的补丁。我尝试像这样将它们添加到git:-
但这也行不通。
git - Git - 在在线存储库中有未跟踪的文件
我正在使用 git (bitbucket) 对我的 linux 配置文件进行源代码控制。所有文件都在目录中~/.cfg/
。然后我还有一些本地配置文件,~/.cfg/local/
这些文件应该因机器而异。
我想在我的在线存储库中保留本地文件的副本作为一种示例本地配置,但我不想跟踪这些文件。不过,我真的不在乎它们是否被克隆git clone
,无论哪种方式都可以。
我尝试遵循此答案,但这会从在线存储库中删除文件。
我还尝试了这篇博文中概述的解决方案,效果更好,但不幸的是有两个缺点:1)它必须在每台机器上重复,2)它实际上并没有取消关注文件。因此,如果我不小心从某台机器上传了本地配置(忘记运行帖子中的命令),git pull
任何其他机器上的下一个将覆盖该机器的本地配置。
总而言之,我想要一个执行以下操作的解决方案:
- 它将整个
~/.cfg/
(包括~/.cfg/local/
)的初始上传保存在在线存储库中。 - 每当我执行标准时,它都会推送内容,
~/.cfg/
但不会推送内容~/.cfg/local/
git add -A; git commit -m "asdf"; git push
- 它提取 when I 的内容,
~/.cfg/
但不提取~/.cfg/local/
when I的内容git pull
。
git - 为什么 git 在“git add”命令之间产生新的 blob?
所以我最近发现了这个工具git cat-file
,我一直在玩它。我知道 git 使用 blob 来存储实际内容。但是为什么每次我git add
更改文件时似乎都会创建一个新的blob,即与编辑现有的blob,或者创建一个新的blob并删除旧的blob相反?
例如
因此,包含我的中间阶段性更改的 blob 即包含“hello”的 blob abc123 的目的并不明显。
在提交方面,hello.txt
从“”直接变为“hello world”,如果不挖掘 git blob,我什至无法取回我的中间更改 abc123。
git - 撤消 git update-index --no-assume-unchanged (不起作用)并能够再次看到这些本地更改
更新:我的权限问题以某种方式任意修复,因为现在完全相同的远程分支创建命令有效,所以(正如您可能猜到的)它不是由这个跟踪问题引起的。
现在我只是想解决跟踪问题。谢谢!
原文:我最初在几个文件中应用了以下内容:
参考本文档:
https://git-scm.com/docs/git-update-index#_using_assume_unchanged_bit
从我的工作目录更改中隐藏某些文件(因为将文件添加到.git/info/exclude
似乎没有效果 - 尽管路径正确并且尚未提交,但文件仍然可见)。
然后我遇到了一些推送到以前不存在的远程分支的问题,标准
所以,鉴于我在运行之前没有访问问题update-index
,我决定恢复它,--assume-unchanged
因为我没有对我的 git repo 做任何其他混乱。
我能够使用查看这些assume-unchanged
文件
我试图assume-unchanged
通过使用恢复
assume-unchanged
如此处关于跨多个文件还原的指示:
撤消 git update-index --assume-unchanged <文件>
这并没有恢复它们,然后我尝试了
根据此建议:
撤消 git update-index --assume-unchanged <文件>
这些文件仍然不可见,我现在也无法通过运行查看它们
我还在我的一个文件上进行了实验性尝试:
按照这里
https://git-scm.com/docs/git-update-index#_skip_worktree_bit
正如我所知skip-worktree
,assume-unchanged
我希望看到该文件的一些状态变化。依然没有。
如何将文件恢复为可见并在我的工作目录中跟踪更改?
作为一个额外的问题,您知道这可能如何影响我创建新远程分支的访问权限吗?
git - 撤消“git update-index --assume-unchanged”不起作用(与 --no-skip-worktree 结合使用)
我已经阅读了Undo git update-index --assume-unchanged file,但是唉,没有任何效果:
我试过了:
刚刚完成,但是当我git ls-files -v
再次完成时:同样的结果。尽管我有一个 clean git status
,但当我分别进行 fetch/rebase 拉时,我最终得到:
(顺便说一句:git update-index --really-refresh
也......什么都不显示)
我在这里缺少什么,我如何说服 git 开始再次将 ant.xml 视为正常的跟踪文件?
git - libgit2-newbie 问题:提交中的文件树中有什么?
tl; dr:libgit2-newbie 对编码提交中的索引感到困惑,最终决定忽略索引并仅更新提交树。如果这是错误的,请告知。
这是一个关于 git 内部的(libgit2-newbie)问题,使用 libgit2。我正在尝试编写一些代码来暂存文件并提交它,以便我可以推送它。为简单起见,假设我刚刚克隆了存储库,并且存储库中有几个文件。所以磁盘上的索引是空的。然后我将索引读入我的程序,将我的新文件添加到索引中并使用索引提交更改(以之前的提交作为父项)。这意味着我传递给提交的树中只有一个文件。但是,这会导致我的所有其他文件都被删除。
我究竟做错了什么?
我传递给提交的树应该包含所有文件(包括现有文件)还是只包含新文件?如果所有文件,我从哪里得到列表?我查看了https://libgit2.org/docs/guides/101-samples/#commits中的示例,但这并不能回答我的问题。
我的代码是用 Rust 编写的,所以除非有人需要,否则我不会详细说明。
编辑:好的,我进一步查看了文档。在这个练习中我应该忽略这个索引吗?使用的解决方案git_treebuilder_new()
(或者更确切地说repo.treebuilder(Some(old_tree))
,对我来说),使用树构建器添加我的新文件,构建新树,并使用新树提交?...这似乎工作