TL;博士:
有没有办法让Git永久排除Git存储库子目录中的所有工作副本更改,而不是git status
和朋友中的“未跟踪文件”和“已删除文件”,没有< / strong>从远程源删除它们?
我在一个不可避免地重命名某些文件的系统上,但不应该在存储库中重命名它们。我没有使用这些文件,但它们使我的git status
和git diff
输出变得混乱。将它们添加到.gitignore
可以解决未跟踪的文件问题,但它仍然说文件已被删除。
对好奇的冗长解释,并避免让人说我不应该问这个问题:
我的工作副本位于我尝试从VM(VMware Fusion中的Ubuntu)和主机(Mac OS X)访问的共享文件夹中;我在VM端做了克隆。 VM的共享文件夹功能在将任何文件系统写入文件系统后立即将:
替换为&%
,这就是OS X看到它的方式。问题是,我的工作场所的Git存储库有数百个的关键任务文件,文件名中包含:
,所有文件都在一个大目录中。我不需要编辑或使用这些文件或它们所有的目录,但是当我想使用GitX或Mac端的命令行实用程序时,它们会显示为删除和未跟踪的文件(这将允许我在不占用VM的所有RAM的情况下进行开发,)。除此之外,Mac上的git正确地看到了我的其他更改,除了这个目录之外它还能正常工作。我无法将文件重命名为冒号,因为这在OS X上是非法的(如果您尝试ls
它,则会中断mv
,FWIW)。我提到的任何其他解决方案都是受欢迎的!谢谢!
答案 0 :(得分:0)
尝试找出一种不同的方式在VM和主机系统之间共享文件,因为Ubuntu和Mac OS X都允许在文件名中使用冒号。
我不建议使用AFP(Mac的文件共享协议),因为Linux客户端已损坏并将冒号映射到斜杠,使得冒号的文件完全无法访问,因为斜杠将被解释为目录分隔符。 (是的,我提交了一个针对afpfs的错误。)
我也不推荐使用SAMBA,我怀疑SAMBA的文件名相当有限。
但NFS有效。在Mac OS X上设置非常简单,已经安装了服务器程序,您只需编辑导出文件(/etc/exports
,参见man 5 exports
)并打开服务器({{1 }})。从Linux,安装NFS共享(nfsd enable
)。完成。
为了让这项工作顺利进行,您需要解决几个问题。理想情况下,您的用户ID在两个系统上都是相同的 - 在Mac上可能为500,在Ubuntu上为1000。在Linux上编辑mount host:/absolute/path
以解决此问题,然后/etc/passwd
。 (我做了相反的操作并将Mac上的UID更改为1000,但我的帐户从登录窗口消失了.C'est la vie。)除非你小心{{1},否则你的计算机可能会有一个安全漏洞。文件 - 请记住,NFS不仅是未加密的,而且NFS服务器信任他们的客户端几乎完全没有要求身份验证(除非你使用GSS,NFSv3和NFSv4中的标准,但GSS是很多工作)。
您也可以这样做 - 从Ubuntu导出NFS并将其挂载到Mac上。在Finder中选择“连接到服务器”并输入chown -R username /home/username
,它将显示为卷。
答案 1 :(得分:0)
可以将git工作空间中的路径标记为“未更改”,以便git status
和git diff
不会看到文件/路径已被修改。 E.g:
$ 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)
为路径设置“assume-unchanged”位后,git将不再期望对文件进行任何修改,也不会报告任何修改。