在 windows 和 linux 之间使用相同的 git 存储库会导致额外提交
Using the same git repository between windows and linux results in an extra commit
我有一个包含我的数据的 NTFS 分区,在两个操作系统之间共享(我是双引导 Linux 和 Windows)。我有一个存储库,我一直在使用 Linux 工作一段时间,一切都很好,直到我尝试在 windows 上打开存储库。我注意到我有未暂存的更改,即使我没有更改任何内容。如果我提交它们并从 Linux 打开存储库,我会有另一组未暂存的更改并且循环继续。提交时出现的更改是所有跟踪文件的 mode change [some #] => [some other #] [file name]
列表。
我看到有人说在不同操作系统之间共享存储库不是一个好主意但没有说明原因。有人可以解释为什么会发生这种情况,是否可以解决(如果可能,不使用不同的存储库)。
PS。是的,如果这会有所不同,我正在使用 Github 来托管回购协议。
Git 将有关工作树中文件的信息存储在索引中。索引中存储的部分数据是有关每个文件的设备和索引节点的信息。此信息因操作系统而异,因为不同的操作系统对其设备编号不同。因此,跨操作系统共享工作树至少会导致在切换操作系统后 运行 git status
或某些其他命令时需要重新读取所有文件。
此外,Linux在文件系统中保留了可执行权限,而Windows则没有。因为 NTFS 是 Windows 文件系统,所以它不维护可执行权限。 Linux 只能假设 每个 文件都是可执行文件,因此您的提交导致许多无法有效执行的文件被标记为可执行文件。这就是权限似乎发生变化的原因。
一般来说,NTFS 对于 Linux 来说不是一个好的文件系统。您最好使用 UDF 文件系统,它可以在 Linux 和 Windows 上工作,但可以保留和使用 POSIX 权限。
如前所述,您将在跨操作系统共享工作树时遇到问题。 UDF 可能会使其正常运行并避免当前的权限切换问题,但它仍然不是推荐的解决方案,您应该避免它。
我有一个包含我的数据的 NTFS 分区,在两个操作系统之间共享(我是双引导 Linux 和 Windows)。我有一个存储库,我一直在使用 Linux 工作一段时间,一切都很好,直到我尝试在 windows 上打开存储库。我注意到我有未暂存的更改,即使我没有更改任何内容。如果我提交它们并从 Linux 打开存储库,我会有另一组未暂存的更改并且循环继续。提交时出现的更改是所有跟踪文件的 mode change [some #] => [some other #] [file name]
列表。
我看到有人说在不同操作系统之间共享存储库不是一个好主意但没有说明原因。有人可以解释为什么会发生这种情况,是否可以解决(如果可能,不使用不同的存储库)。
PS。是的,如果这会有所不同,我正在使用 Github 来托管回购协议。
Git 将有关工作树中文件的信息存储在索引中。索引中存储的部分数据是有关每个文件的设备和索引节点的信息。此信息因操作系统而异,因为不同的操作系统对其设备编号不同。因此,跨操作系统共享工作树至少会导致在切换操作系统后 运行 git status
或某些其他命令时需要重新读取所有文件。
此外,Linux在文件系统中保留了可执行权限,而Windows则没有。因为 NTFS 是 Windows 文件系统,所以它不维护可执行权限。 Linux 只能假设 每个 文件都是可执行文件,因此您的提交导致许多无法有效执行的文件被标记为可执行文件。这就是权限似乎发生变化的原因。
一般来说,NTFS 对于 Linux 来说不是一个好的文件系统。您最好使用 UDF 文件系统,它可以在 Linux 和 Windows 上工作,但可以保留和使用 POSIX 权限。
如前所述,您将在跨操作系统共享工作树时遇到问题。 UDF 可能会使其正常运行并避免当前的权限切换问题,但它仍然不是推荐的解决方案,您应该避免它。