0

tl;dr:有没有办法让 Git 永久排除 Git 存储库子目录中的所有工作副本更改,使其不被列在“未跟踪文件”和“已删除文件”git status和朋友中,而无需从远程删除它们起源?

我在一个不可避免地重命名某些文件的系统上,但它们不应该在存储库中重命名。我没有使用这些文件,但它们使我的git status输出git diff变得混乱。添加它们以.gitignore解决未跟踪文件的问题,但它仍然说文件已被删除。

对好奇的人进行冗长的解释,并避免人们说我不应该问这个问题:

我的工作副本位于我试图从 VM(VMware Fusion 中的 Ubuntu)和主机(Mac OS X)访问的共享文件夹中;我在VM端进行了克隆。虚拟机的共享文件夹功能在写入文件系统后立即替换为任何文件名,这就是 OS X 所看到的:&%问题是,我工作场所的 Git 存储库有数百个关键任务文件:在文件名中,都在一个大目录中。我不需要编辑或使用这些文件或它们所在的目录,但只要我想从 Mac 端使用 GitX 或命令行实用程序,它们就会显示为删除和未跟踪的文件(这将允许我在不耗尽我所有的内存的情况下进行开发,)。除此之外,Mac 上的 git 可以正确看到我的其他更改,并且除了这个目录之外它可以完美运行。我无法将文件重命名为冒号,因为这在 OS X 上是非法的(ls如果您尝试这样做会中断mv,FWIW)。欢迎使用除我提到的解决方案之外的任何其他解决方案!谢谢!

4

2 回答 2

0

尝试找出一种不同的方式在 VM 和主机系统之间共享文件,因为 Ubuntu 和 Mac OS X 都允许文件名中包含冒号。

我不推荐 AFP(Mac 的文件共享协议),因为 Linux 客户端已损坏,会将冒号映射到斜杠,使带有冒号的文件完全无法访问,因为斜杠将被解释为目录分隔符。(是的,我针对 afpfs 提交了一个错误。)

我也不推荐 SAMBA,我怀疑 SAMBA 的文件名相当有限。

但是 NFS 有效。在 Mac OS X 上设置非常容易,服务器程序已经安装,您只需编辑导出文件(/etc/exports请参阅man 5 exports)并打开服务器(nfsd enable)。在 Linux 中,挂载 NFS 共享 ( mount host:/absolute/path)。完毕。

您需要解决几个问题才能使其顺利运行。理想情况下,您的用户 ID 在两个系统上是相同的——在您的 Mac 上可能是 500,在 Ubuntu 上可能是 1000。在 Linux 上进行编辑/etc/passwd以解决此问题及chown -R username /home/username之后。(我做了相反的事情,将我 Mac 上的 UID 更改为 1000,但我的帐户从登录窗口中消失了。C'est la vie。)除非你小心你的exports文件,否则你的计算机可能会有一个巨大的安全漏洞——请记住,NFS 不仅未加密,而且 NFS 服务器几乎完全信任其客户端并且不要求进行身份验证(除非您使用 GSS,它在 NFSv3 中可用,在 NFSv4 中是标准的,但 GSS 需要大量工作)。

您也可以做相反的事情——从 Ubuntu 导出 NFS 并将其安装在 Mac 上。在 Finder 中选择“连接到服务器”并输入nfs://host/absolute/path,它将显示为一个卷。

于 2011-07-07T05:42:49.093 回答
0

可以将 git 工作区中的路径标记为“未更改”,这样git statusgit diff不会看到文件/路径已被修改。例如:

$ echo "default_value=Foo" > local.properties
$ git add local.properties
$ git commit -m'Default local.properties'

$ git update-index --assume-unchanged local.properties
$ echo "default_value=Bar" > local.properties
$ git status
# On branch master
nothing to commit (working directory clean)

一旦为路径设置了“假设不变”位,git 将不再期望对文件进行任何修改,也不会报告任何修改。

于 2012-02-21T20:03:48.603 回答