为什么创建空的 .git/lfs/tmp/ 对象?

问题描述 投票:0回答:1

我们做了一个简单的

cp -R repo1 test/
以为我们会在 dir test/repo1 中获得与 dir repo1 相同数量的文件

但是我们注意到运行后在以下路径中创建了新对象

git status
-

./.git/lfs/tmp/3456789021

./.git/lfs/tmp/3452229021

./.git/lfs/tmp/3456449021

./.git/lfs/tmp/3456449000

  1. 为什么使用
    git status
    命令在其中创建新文件?
  2. 我们如何在另一个目录中获取 dir repo1 中文件的精确副本?

谢谢

git git-lfs
1个回答
0
投票

Git 将数据存储在索引中,包括每个文件的创建时间、设备号和 inode 号等信息,这些信息通常在文件复制时发生变化,不能从一个文件复制到另一个文件。 Git 使用此信息来确定文件何时更改。

在这种情况下,由于文件已更改(因为索引中的数据不匹配),当您运行

git status
时,Git 调用 Git LFS 来清理文件(通过其污迹/清理过滤器)以创建指针Git 跟踪和存储大文件的文件。每当您刷新索引(例如使用
git status
)时,这总是会发生并且是不可避免的。

当该操作发生时,Git LFS 将在其操作过程中创建一些临时文件。通常这些会被立即清理,但在某些情况下,它们只会在它们变得陈旧并再次调用 Git LFS 后才会被清理。这是正常现象,无需担心。

这里没有任何迹象表明存在实际问题,我的建议是忽略它。如果不能,并且您只需要工作树中文件的实际副本,请在创建目标目录后考虑

git -C SOURCE-DIRECTORY archive -o - HEAD | tar -C DESTINATION-DIRECTORY -xf -
。您也可以将存储库克隆到新位置,但是您不会拥有完全相同的文件,因为您最终可能会在目标位置得到一个大包文件并且没有松散的对象。

© www.soinside.com 2019 - 2024. All rights reserved.