git 去掉UserInterfaceState.xcuserstate文件

本文介绍了如何在git中去掉UserInterfaceState.xcuserstate文件,包括查看状态、创建.gitignore文件、修改配置、提交并清理缓存,以及处理合并分支时的提交历史问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考     点击打开链接      点击打开链接   点击打开链接


一、   git status     

复制UserInterfaceState.xcuserstate文件文件路径路径

二、在同 .git目录创建.gitignore文件。在文件中加入如下内容:


在.git同目录的命令行下

先创建touch .gitignore,
打开vim.gitignore,
粘贴进去,
保存关闭,
添加到缓存区,git add .gitignore
提交git commit -m "添加了.gitignore文件"
推送git push
*.xcuserstate
     */.DS_Store
     .DS_Store
     project.xcworkspace
     xcuserdata
     UserInterfaceState.xcuserstate
     project.xcworkspace/
     xcuserdata/
     UserInterface.xcuserstate

 

项目名.xcodeproj/project.xcworkspace/xcuserdata/电脑用户名.xcuserdatad/UserInterfaceState.xcuserstate 


三、退出xcdoe, 打开终端(Terminal),进入项目目录下。

四、在终端键入 

git rm --cached [YourProjectName].xcodeproj/project.xcworkspace/xcuserdata/[ YourUsername].xcuserdatad/UserInterfaceState.xcuserstate

git rm --cached   你刚git status  复制的路径

五、在终端键入  git commit -m "Removed file that shouldn't be tracked"

      git clean -f -d(加 上这个好了   2018.3.27 )


六、重新打开Xcode commit, push。

git commit -m "Removed file that shouldn't be tracked"


还有一个问题是在我公司商户端dev 与 master的合并  master有dev的提交记录 但是用户端的 没有dev的提交记录了    纠结了一上午     试了十几次各种合并 依旧Xcode 没有提交历史记录   码云上面有  

最后折中   在码云上面设置master分支 不为默认分支 不然无法删除 然后通过

git branch -D master;//删除本地master分支
git push origin :master;//删除远程master分支
重新创建新的master分支   从dev把代码拉到master 就可以了  


上传空的文件夹

有时候我们为了保证项目结构,所以要上传空的文件夹到git , 这时候只需要在git 根目录下执行
find . -type d -empty -exec touch {}/.gitignore \; 就可以上传空的文件夹 (其实原本是空的文件夹里建立的一个.gitignore)。






<think>我们正在处理一个Git推送失败的问题,错误是由于预接收钩子(pre-receive hook)拒绝了二进制文件的上传。用户需要解决这个禁止二进制文件的错误。 首先,我们需要理解预接收钩子(pre-receive hook)是什么:它是Git服务器端的一个脚本,在推送操作时运行,用于检查即将被推送上来的引用(refs)。如果这个脚本以非零状态退出,那么推送就会被拒绝。在这个场景中,钩子检测到了二进制文件并拒绝了推送。 解决这个问题的步骤可能包括: 1. 确认被拒绝的文件:从错误信息中,我们可以知道哪些文件被拒绝。通常错误信息会明确指出哪些文件是二进制文件并且被禁止。 2. 了解为什么这些文件被禁止:可能是项目策略不允许提交二进制文件(比如可执行文件、压缩包等),因为它们会导致仓库过大,或者存在安全风险。 3. 解决方案: a. 如果这些二进制文件确实不应该被提交,那么应该将它们从提交中移除,并添加到.gitignore文件中,以免再次被添加。 b. 如果这些文件是必须的,并且有合理的理由提交(比如项目依赖的二进制文件),那么可能需要联系仓库管理员,调整钩子的设置以允许这些文件。 但是,由于钩子是服务器端设置的,普通用户可能无法直接修改。因此,用户可能需要: - 从当前提交中移除这些二进制文件(使用`git rm --cached`命令将它们从暂存区移除,然后提交这个更改)。 - 将这些文件添加到.gitignore文件中,确保以后不会再次添加。 - 然后再次尝试推送。 如果这些二进制文件是必须的,那么用户可能需要与团队或仓库管理员沟通,看是否可以将这些文件添加到钩子的白名单中,或者是否可以将这些文件存储在别的地方(例如使用Git LFS(Large File Storage)来管理大文件)。 具体操作步骤: 步骤1:查看错误信息,确定被拒绝的文件。 步骤2:在本地仓库中,移除这些文件的提交(如果已经提交): 如果文件已经被提交,需要从Git历史中移除它们(注意:如果这些文件已经存在于远程仓库的历史中,那么可能需要更复杂的清理操作,例如使用`git filter-branch`或BFG Repo-Cleaner来清除历史记录中的二进制文件,但这通常需要协调团队)。 但是,由于问题发生在推送时,说明本地提交已经包含了这些文件,而远程仓库的钩子拒绝了它们。因此,我们需要在本地撤销这些文件的提交。 例如,假设错误信息指出文件`example.bin`被拒绝: 1. 从暂存区中移除该文件(如果已经使用`git add`添加了): ``` git rm --cached example.bin ``` 2. 提交这个更改(这将会从版本控制中移除该文件,但保留在本地磁盘上): ``` git commit --amend # 如果是在最近一次提交中,可以修改最后一次提交 或者 git commit -m "Remove binary file" ``` 3.文件添加到.gitignore,避免再次添加: ``` echo "example.bin" >> .gitignore git add .gitignore git commit -m "Add example.bin to .gitignore" ``` 4. 再次尝试推送。 如果这些文件已经存在于之前的提交中(而不仅仅是当前推送的提交),那么可能需要重写历史来完全移除这些文件。注意:重写历史会改变提交的SHA1值,因此如果其他人已经基于这个分支工作,那么重写历史可能会造成问题。在这种情况下,需要与团队协调。 另外,如果项目允许使用Git LFS来管理大文件,那么可以配置Git LFS来跟踪这些二进制文件。这样,这些文件就不会直接存储在Git仓库中,而是存储在LFS服务器上。但是,这需要服务器端也支持Git LFS。 使用Git LFS的步骤: 1. 安装Git LFS(如果尚未安装):https://git-lfs.github.com/ 2. 在仓库中启用Git LFS: ``` git lfs install ``` 3. 指定要用LFS跟踪的文件类型,例如: ``` git lfs track "*.bin" ``` 4. 然后添加并提交`.gitattributes`文件(该文件由`git lfs track`命令自动生成或更新): ``` git add .gitattributes git commit -m "Track .bin files with Git LFS" ``` 5. 现在,当你添加一个.bin文件时,它会被LFS跟踪: ``` git add example.bin git commit -m "Add example.bin with LFS" ``` 6. 然后推送,注意推送时需要将LFS文件一起推送到LFS服务器(需要配置远程服务器支持LFS)。 但是,如果服务器端的预接收钩子配置为禁止任何二进制文件,那么即使使用LFS,也可能因为钩子的检查而失败。因为LFS跟踪的文件Git仓库中存储的实际上是指针文件(文本文件),而真正的二进制内容在LFS服务器上。所以,钩子可能不会阻止指针文件。但是,如果钩子检查的是文件内容(而不仅仅是扩展名),那么它可能会检测到指针文件是文本文件而允许通过。因此,使用LFS可能是解决方案之一。 但是,如果钩子配置为禁止任何二进制文件,并且没有对LFS指针文件做特殊处理,那么使用LFS可能仍然无法通过。因此,最好的方法是与仓库管理员沟通,了解他们的策略。 总结: 1. 首先尝试移除二进制文件并忽略。 2. 如果必须提交,考虑使用Git LFS(如果允许的话)。 3. 与仓库管理员沟通,调整钩子的设置。 由于用户的问题描述中提到了“Git binary dependencies are now cached”,这可能与Git的二进制依赖缓存有关,但这不是直接相关的问题。我们主要关注如何解决预接收钩子拒绝二进制文件的问题。 下面,我们将按照用户的要求,生成相关问题。 注意:用户要求生成相关问题,我们将在回答的最后添加相关问题。</think>### 解决 Git 推送因预接收钩子拒绝二进制文件的问题 当 Git 推送因预接收钩子(pre-receive hook)拒绝二进制文件而失败时,通常是由于仓库配置了禁止提交二进制文件的策略。以下是分步解决方案: #### 1. **确认被拒绝的文件** ```bash # 查看最近被拒绝的提交详情 git show --stat ``` 错误消息通常会显示被拒绝的文件名(如 `*.exe`, `*.dll`, `*.jar` 等),类似: ``` remote: error: pre-receive hook declined: Binary files (exe/dll/jar) are not allowed [^1] ``` #### 2. **从提交中移除二进制文件** - **情况 1:文件尚未提交** ```bash # 从暂存区移除文件 git reset HEAD <二进制文件路径> # 添加到 .gitignore 防止误提交 echo "<二进制文件路径>" >> .gitignore git add .gitignore git commit -m "忽略二进制文件" ``` - **情况 2:文件已提交** ```bash # 从 Git 历史中彻底删除文件(强制重写历史) git filter-branch --force --index-filter \ "git rm --cached --ignore-unmatch <二进制文件路径>" \ --prune-empty --tag-name-filter cat -- --all ``` #### 3. **使用 Git LFS 管理必需二进制文件** 若二进制文件必须提交(如项目依赖): ```bash # 安装 Git LFS git lfs install # 指定需用 LFS 管理的文件类型 git lfs track "*.exe" "*.dll" # 提交 .gitattributes 文件 git add .gitattributes git commit -m "启用 LFS 管理二进制文件" git push origin main ``` > 需确保服务器支持 Git LFS[^1]。 #### 4. **检查并调整钩子配置(需权限)** 联系仓库管理员检查服务端钩子脚本(如 `.git/hooks/pre-receive`),确认: - 是否允许特定二进制文件(如添加白名单) - 是否需调整文件大小/类型检测规则 #### 5. **推送修复后的代码** ```bash # 强制推送(仅当重写历史后需要) git push --force origin main ``` --- ### 常见原因与预防措施 | 原因 | 解决方案 | |---------------------|-----------------------------| | 误提交编译产物 | 将 `bin/`, `target/` 等目录加入 `.gitignore` | | 服务器策略限制 | 使用 Git LFS 或联系管理员调整钩子规则 | | 历史遗留二进制文件 | 使用 `git filter-branch` 清理历史 | > **注意**:重写历史 (`filter-branch`) 会影响协作,操作前需协调团队成员。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值