标签 git 下的文章

恢复git push -f丢失的提交

如果有人本地仓库比较新,让他暂时不要更新,并 git push -f,然后你拉取并合并即可,同时吸取教训,将重要分支设置为保护,如果是在线修改或没人拉取最新代码,能否恢复取决于远端仓库是否执行gc,否则神仙也救不回来了。

以没有gc过为例,登录到远程git服务器,并找到仓库所在目录,以我使用的gitea为例,gitlab类似:

git clone /home/git/gitea-repositories/fengqi/exmaple.git rescue
cd rescue

# 查找丢失的提交,如果没有输出commit表示没救了
git fsck --lost-found
Checking object directories: 100% (256/256), done.
Checking objects: 100% (31/31), done.
dangling commit 558aac381bc8acb161447686361928e2e2edc9bf
dangling blob 82f865770e1590763574a60d53286f2102f6b03b
dangling blob d912156bec00a9f00850ab2ec3a3baf1016c2141
dangling blob f02e11383e55a7f7ac33d8dc6554ce4901e55a64

# 查看内容
git show 558aac381bc8acb161447686361928e2e2edc9bf

git checkout branch_xxx
git rebase 558aac381bc8acb161447686361928e2e2edc9bf

# 这里可能提示和远端不一样导致push失败,可以fetch后rebase,也可以pull,看你喜好
git push branch_xxx

因为原始信息只在远端,如果你没有权限登录到git远程仓库,大概率也没救了。

[分享] SSH和Git共享22端口,适用于docker或者frp转发等

先说下我的使用场景:

  1. 我有一台跑在腾讯云上的VPS,就是此博客系统所在的机器,这台机器是有公网IP的
  2. 在我家里的内网,有一台4核16G的小型服务器,没有公网IP,运行Proxmox VE虚拟了各种服务,其中包括Gitea
  3. 我通过frp转发暴露内网的Gitea到公网
  4. 在这之前我一直使用HTTP协议上传或者下载代码,现在觉得太麻烦想用SSH协议

如果你跟我的场景类型,此文很适合你,如果你是同一台机器上docker宿主机之间22端口共享问题,文末官方文档更适合你。

本文也是参考了文末官方文档的实现,但是有部分不太一样。

- 阅读剩余部分 -

[转载]Git 忽略 chmod 更改

利用git来进行web开发的时候,通常涉及到文件权限的更改是不需要让git变更的。所以我们需要让git来排除chmod更改。

我们打开shell, cd到git根目录,执行命令: git config core.filemode false

然后我们再来执行git status就会发现少了很多需要变更的文件

建议设置到全局, 命令改为: git config --global core.filemode false

今天被一个同事一次提交近300个文件的更改(全部chmod...)吓到了, 提交前也不对比下, 不过 Gitlab 居然没有卡死.

参考: Git忽略chmod更改

[记录]Gitlab 在安装完成后才启用 HTTPS 记得重新清理 assets

不然浏览器就会提示:

与 git.fengqi.me 的连接采用 128 位加密技术。但是,此页中包含其他不安全的资源。他人能在传输过程中查看这些资源,攻击者也可以进行修改,从而改变网页的外观。

该连接使用 TLS 1.2。

该连接使用 AES_128_GCM 进行加密和身份验证,并使用 ECDHE_RSA 作为密钥交换机制。

重新清理生产 assets 就好了:

cd /home/git/gitlab
sudo -u git -H bundle exec rake assets:clean assets:precompile cache:clear RAILS_ENV=production

刷新浏览器.

[转载]VIM使用小技巧-重新载入文件

原文地址: VIM使用小技巧-重新载入文件

有时候要使用VIM打开了一些文件,但是在其他地方把次文件改动了,例如使用git进行checkout等操作,需要重新载入此文件。

1 重新载入当前文件:

:e
:e! #放弃当前修改,强制重新载入

2 重新载入所有打开的文件:

:bufdo e 或者 :bufdo :e!
:bufdo命令表示把后面的命令应用到所有buffer中的文件。

参考网址:Refresh all files in buffer from disk in vim, Run a command in multiple buffers

轻松搭建git服务器

最近svn频繁出怪问题, 也可能是我vps不行吧(512MB内存, 出问题时的负载不足1, 内存120空闲...), 实在忍不住, 干脆换git了, 下面把摸索出来的东西记录下, 只简单说下而已..

个人怎么使用我就不说了, 如果你刚接触git也可以参考文章末尾我提供的参考文档; 这里只说下git服务器的搭建, 下面的内容都建立在我认为你已经大致会使用git init, git add, git commit等简单命令的基础上.

另外关于认证方式, 我们选择单用户, 多证书的方式, github就是如此, 因为是ssh访问, 不可能每个人在服务器上有一个用户, 关于几种认证方式请参考文章末尾我提供的参考文档, 那下面我们开始吧.

- 阅读剩余部分 -