6

我有一个 git 存储库(和工作目录),存储在我的 Dropbox 中,因此我可以在计算机之间来回移动,而无需提交或存储(阅读:完全不费力)。这很好用,除了一个小烦恼正在变成一个主要烦恼。

每隔一段时间,我就会让一台计算机处于完全提交状态,然后在另一台计算机上启动并发现git status报告发生了变化。不可避免地,这些更改与权限有关。我不确定为什么?我认为这可能与 Dropbox 如何在同步的计算机上写入文件有关,但umask两个系统上的 0002 都设置为 0002。我认为该值决定了 Dropbox 写入/更新文件的模式,但它不会是第一次我会错的。

我知道我可以告诉 Git 忽略文件模式,但这只是掩盖了问题。我真的很想了解它,以便我可以就如何进行做出明智的决定。

谢谢。

更新

因此,这是一个相当不错的代表性示例,即即使存储库完全包含在 Dropbox 中,它也会不同步。正如我们所说,我的个人笔记本电脑正在为我的一个项目报告一个干净的工作目录:

$ git status
# On branch develop
nothing to commit (working directory clean)

但是,我的工作笔记本电脑报告了许多未跟踪的文件。让我再说一遍:未跟踪的文件。

$ git status
# On branch develop
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   html/cake/console/libs/templates/
#   ...4 more files...
#   html/cake/tests/test_app/plugins/test_plugin/views/themed/
nothing added to commit but untracked files present (use "git add" to track)

怎么可能?我的~/.gitignore文件也在两台机器之间共享(并不是说这些路径中的任何一个都被排除在忽略文件中)。Git 的另一个组件——或者可能是 Dropbox——可以在这里发挥作用吗?

4

3 回答 3

1

你可能想检查你在哪里设置你的 umask;可能是保管箱以与您的外壳不同的 umask 开头。但是,我认为 git 忽略了组/其他权限,并且主要关注执行位,它不应该受到 umask 的影响。调试的一些想法:

  • 您可以按需复制此内容吗?如何?
  • 您在哪些操作系统之间进行同步?
  • 如果您git checkout -f处理有问题的文件,它们是否获得正确的权限?
  • 如果您只是chmod一个系统上的一个文件,那么该更改是否会传播?
于 2010-09-22T03:29:52.800 回答
1

在相同的情况下,我遇到了这个确切的问题。

要停止显示的文件,git status您可以将 git 设置为忽略文件模式更改:

git config core.filemode false

此更改是 git 存储库的本地更改,并将与文件一起同步。

于 2011-03-10T22:52:44.717 回答
0

您使用 Mac 的事实是相关的 - 评论中提到的Macworld Hints 文章解释了这个问题(但请仔细阅读解释如何使用chmod u+rwXetc 修复权限的评论,而不是可能会搞砸的绝对权限)。

Dropbox 支持答案解释了可能发生的情况以及如何修复它 - 与 MacOS X Leopard (10.5) 如何更改 ACL 的默认用法有关。

于 2011-10-13T16:14:10.913 回答