1
stringtheory OP 悲剧的是,按照这个帖子 http://www.ifeegoo.com/git-code-management-dot-gitignore-file-has-no-effect-solution.html#comment-1228
试了一下 git rm -r --cached . 然后 git add . git commit -a -m 'msg' 然后 git push origin dev 提示: Counting objects: 40, done. Delta compression using up to 8 threads. Compressing objects: 100% (40/40), done. Connection reset by 192.30.253.1138 MiB | 13.00 KiB/s fatal: The remote end hung up unexpectedly14.00 KiB/s fatal: sha1 file '<stdout>' write error: Broken pipe error: failed to push some refs to '[email protected]:***/***.git' |
2
otakustay 2017-02-24 12:05:08 +08:00
你在添加 gitignore 之前 pdf 是不是已经 add 和 commit 过了?
|
3
kevinyoung 2017-02-24 12:13:20 +08:00
我来给个方案,在目录的 Makefile 里面添上这么一句:
clean: rm -f *.pdf *.out *.toc *.aux *.log *.nav *.snm *.bbl *.blg *.dvi *.bcf *.xml 每次提交之前都来个 make clean ,这样生成的东西就都没了,目录下面干干净净的只剩文本了 |
4
xjp 2017-02-24 12:23:17 +08:00 via iPhone 1
gitignore 不会忽略已经添加到版本管理里的文件 删除仓库里的文件后 gitignore 才会生效
|
5
SpicyCat 2017-02-24 12:39:50 +08:00 1
git filter-branch --index-filter 'git rm --cached --ignore-unmatch path/to/your/file.pdf' HEAD
|
6
yushiro 2017-02-24 13:16:43 +08:00 via iPhone 1
你需要 bfg ,专门用来删除 git 历史记录的文件。
具体的请 google , bfg 的官网有详细的教程 |
7
shalk 2017-02-24 13:32:48 +08:00 1
|
8
msg7086 2017-02-25 08:45:46 +08:00 1
每次遇到这种帖子,我都毫不犹豫推荐下载一份 SmartGit 自己看看仓库里有点什么东西再说。
如果你不熟悉 Git ,为什么不让图形界面帮你一下呢。 |
9
matsuz 2017-02-25 11:31:18 +08:00 via Android
commit 之前 git status 看看添加了哪些文件
|
10
stringtheory OP @otakustay 可能是的
|
11
stringtheory OP 谢谢楼上各位,我再试试看。
|
12
stringtheory OP 在 dev 分支下使用了命令:
$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch main.pdf' HEAD 提示很多类似如下: Rewrite *** (72 seconds passed, remaining 0 predicted) rm 'main.pdf' 所以应该是把各个历史上的 pdf 都删掉了。 然后$ git status On branch dev Your branch and 'origin/dev' have diverged, and have 206 and 200 different commits each, respectively. (use "git pull" to merge the remote branch into yours) nothing to commit, working directory clean 我的理解是既然本地已经把 pdf 删了,远程 github 上就不要再 pull 回来 merge 了。于是就直接: $ git push origin dev To [email protected]:XXX/XXX.git ! [rejected] dev -> dev (non-fast-forward) error: failed to push some refs to '[email protected]:XXX/XXX.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. 查了查说因为版本落后,所以不能直接 push ,只好强制: $ git push -u origin dev -f Counting objects: 1262, done. Delta compression using up to 8 threads. Compressing objects: 100% (1261/1261), done. Connection reset by 192.30.253.11340.56 MiB | 11.00 KiB/s fatal: The remote end hung up unexpectedlyB | 11.00 KiB/s fatal: sha1 file '<stdout>' write error: Broken pipe error: failed to push some refs to '[email protected]:XXX/XXX.git' 不太明白这是成功了吗,还是需要重新钥匙配对认证? |
13
SpicyCat 2017-02-27 10:44:23 +08:00 1
@stringtheory #12 在做 filter-branch 操作的时候,确保你本地是最新的。当你删除 PDF 文件后,你本地的 git repo 和 remote 就不一致了,所以直接 push 是不行的,需要加 -f 参数。
然而,有些 git 系统,比如 github 和 gitlab, 可以默认设置了保护主分支,就是不能用 -f 来强制 push 。 你最好检查一下有没有这样的设置。 不过你这里报错似乎是网络问题? 你在 git push -f 一次试试看 |
14
stringtheory OP @SpicyCat 谢谢回复, git status 是说 nothing to commit ,所以就没更新本地。不知道是不是网络问题,暂时试了试建立一个新分支 hotfix 过渡用着, hotfix 更新倒是没再遇到网络问题。
|