问题标签 [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.
linux - git在windows和linux之间切换后强制刷新索引
我有一个 Windows 和 linux 共享的磁盘分区(格式:NTFS)。它包含一个 git 存储库(大约 6.7G)。
如果我只使用 windows或只使用 linux来操作 git 存储库,一切都可以。
但是每次我切换系统。该git status
命令将刷新索引,大约需要 1 分钟。运行后git status
,如果我git status
再次在同一系统中运行。只需不到 1 秒。这是结果
我想git缓存有一些问题。例如:windows和linux都使用该.git/index
文件作为缓存文件,但是linux系统中的git无法识别.git/index
windows更改的内容。所以只能刷新索引和替换.git/index
文件,这使得nextgit status
超级快,git status
在windows下很慢(因为windows系统会再次刷新索引文件)。
我的猜测正确吗?如果是这样,我如何使用为不同的系统设置索引文件?我该如何解决这个问题?
git - 重置后 Git 索引文件不一样 - 为什么?
我试图了解 git 索引文件是如何工作的。
我有一个包含一些文件的本地存储库,其中之一是test.txt
. 我正在提交X
并将该提交的索引文件保存到临时目录。
然后我编辑test.txt
添加并提交了它,它创建了 commit Y
。之后,在从 commit 重置为 commit 后,我运行git reset --hard X
并保存了 commit 的索引文件。X
Y
然后我比较了两个索引文件(从 commitX
和从 commitX
重置后的 commit Y
),它们并不相同。怎么会这样 ?文件中有时间戳吗?据我所知,索引应该已重置为其以前的内容(?)
git - Git 如何在内部恢复索引和 wokring 目录(在重置/签出时)?
我了解当我checkout
或reset --hard
特定提交/分支时,我会在我的工作目录和索引文件中获得相关内容。
但是 Git 如何在内部重新构建索引和工作目录内容checkout
或reset --hard
.
是否通过读取我们已签出/重置到的提交指向的树来完成索引恢复?
工作目录是否也以同样的方式恢复?
这是否意味着之后reset --hard
或checkout <some_branch>
索引和工作目录将始终与该提交的树匹配,因为它们是从中重建的?
编辑:我基本上要问的是:索引/WD 内容的恢复是使用我们到达的提交指向的树完成的吗?因为在我看来,git 没有其他方法可以获取该内容,而不是从提交历史记录中获取
git - 克隆一个将成为上游父级的 git 存储库,但我想对我的新项目的 README 进行更改,而不是将其推回
我想将我的新项目基于现有的 git 存储库。我的目的不是扩展当前项目,而是开始一个具有不同目标的新项目。具体来说,我想删除原始 README 和一些原始文件夹,并制作一个更通用的项目模板版本。
我希望以后能够将我的增强功能作为拉取请求推送到上游,但我最初的自定义更改(例如更改 README 和删除原始项目特定的两个文件夹),我不想将这些更改推送到上游。
你将如何管理这个?
git - 为什么`git update-index`不会影响不在当前目录中的文件?
我正在尝试使用git update-index --again
将修改后的文件重新添加到索引中。这工作正常,但仅适用于当前目录中的文件/目录。这是该命令的预期行为还是有任何选项可以使其考虑整个存储库?
git - 我可以在不使用一个命令将文件添加到索引的情况下标记文件以进行解析吗?
发生冲突时,git status
显示如下:
现在我可以git add some_file
按照命令的建议标记分辨率,但这也是 stage some_file
,我可能不想这样做。
如何在不将文件添加到索引的情况下标记文件以进行解析?两步很简单:
但是如果可能的话,我该如何一步完成呢?
如果最佳实践不建议这样做,请告诉我。
git - 为什么 git checkout 文件的行为类似于重置暂存文件,然后检出未暂存文件?
我在 git 文档中遇到过这个声明:
链接:https ://www.atlassian.com/git/tutorials/resetting-checking-out-and-reverting
部分:“Git 签出文件”
现在假设我有一个仓库和一个test.txt
文件
起初工作目录是干净的:
现在我修改 test.txt
、运行git add
并git status
显示:
现在我运行git checkout HEAD test.txt
并得到:
输出git status
:
根据文档,test.txt
索引中的版本应该保持不变,并且工作目录中的版本应该已经更改回 HEAD 指向的提交中的版本,从而导致工作之间的文件版本不同目录和索引——>在这种情况下不应该git status
输出什么?但git status
没有表明 - 为什么?
通常要从暂存文件到清理工作树,我必须先使用git reset HEAD <filename>
该git checkout HEAD <filename>
文件,但这里似乎两者都做?
我很困惑
编辑 - 有趣的是,如果在暂存文件后test.txt
我运行git checkout test.txt
而不是git checkout HEAD test.txt
得到:
即使这两种形式应该是等价的,而前者HEAD
也默认为(?)
我又糊涂了
git-stash - 是否可以存放暂存区,但不能存放工作树?
在向暂存区域添加更改以创建新提交的过程中,我注意到我忘记在之前创建的提交中包含一些其他更改。我想把我添加到暂存区域的更改放在一边,以便我可以将忘记的更改添加到干净的暂存区域,即git commit --amend
我之前的提交,然后返回创建我正在处理的提交。git stash
本来是完成这项工作的理想工具,除了它将工作树重置为最后提交的状态,这是我不想要的
我知道我可以这样做:
git commit -m WIP
保存我当前的工作git add -p
添加忘记的更改git commit --fixup @^
创建一个修复提交git rebase --autostash --autosquash -i @^^^
应用修复提交git reset --soft @^
回去处理新的提交
但我想知道是否可以不进行临时提交。
git - 如何直接快速更改git存储库的git索引中所有文件的uid/gid
我的用例是
- 我有一个由 uidA:gidA 创建的非常大的 GIT 存储库,其所有文件和 git 索引为 uidA:gidA
- 我已经使用 netapp 文件系统技术进行了快照/冻结,也就是冻结了该目录和 git 工作区的内容
- 我“文件系统克隆”了 uidB:gidB 的快照。它会立即使用快照的精确副本创建一个新工作区,每个文件/目录现在由 uidB:gidB 拥有 1 个差异。
当我执行“git status”时,它会强制更新索引,很可能是因为索引中的文件/对象存储为 uidA:gidA,而“文件系统克隆”工作区中的所有文件都归 uidB:gidB并且存在不匹配。
有没有办法有效地将索引中的部分或全部对象/文件更新为 uidB:gidB。我怀疑默认更新实际上会在更新索引之前检查每个文件,在这种情况下不需要。所以我想办法盲目地将索引中的所有文件更新为 uidB:gidB
或者避免强制索引更新。
在 NFS 上,在我们非常大的工作区中进行索引更新需要 20 多分钟。工作空间为 800GB
git - 是否可以从存储中应用单行?
我正在寻找一种在舞台中包含特定部分的方法。我正在使用 TIG 前端,因此该方法可能涉及一些低级偏移等计算。但是目前我不知道要计算什么。
有人知道如何将单行从藏匿处移动到舞台区域吗?