自建 Git server

什么是 GitHub

GitHub就是一个免费托管开源代码的远程仓库。但是对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能自己搭建一台Git服务器作为私有仓库使用。

前期准备

  • 准备一台运行Linux的机器。
    • 假设你已经有sudo权限的用户账号,下面,正式开始安装。

开始安装

第一步,安装git:

$ sudo apt-get install git

第二步,创建一个git用户,用来运行git服务:

$ sudo adduser git

第三步,创建证书登录:

  • 收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub 文件,把所有公钥导入到 /home/git/.ssh/authorized_keys 文件里,一行一个

第四步,初始化Git仓库:

  • 先选定一个目录作为Git仓库,假定是/home/git/sample.git,在 /home/git 目录下输入命令:
$ sudo git init --bare sample.git

Git就会创建一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯粹是为了共享,所以不让用户直接登录到服务器上去改工作区,并且服务器上的Git仓库通常都以.git结尾

  • 然后,把owner改为git:
$ sudo chown -R git:git sample.git

第五步,禁用shell登录:

出于安全考虑,第二步创建的git用户不允许登录shell,这可以通过编辑 /etc/passwd 文件完成。找到类似下面的一行:

git:x:1001:1001:,,,:/home/git:/bin/bash

改为:

git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

这样,git用户可以正常通过ssh使用git,但无法登录shell,因为我们为git用户指定的git-shell每次一登录就自动退出。

第六步,克隆远程仓库:

现在,可以通过git clone命令克隆远程仓库了,在各自的电脑上运行:

$ git clone git@server:/srv/sample.git
# Cloning into 'sample'...
# warning: You appear to have cloned an empty repository.

剩下的推送就简单了。

管理公钥

  • 如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,可以用 Gitosis来管理公钥。

管理权限

有很多不但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套完善的权限控制,每个人是否有读写权限会精确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精神,不支持权限控制。不过,因为Git支持钩子(hook),所以,可以在服务器端编写一系列脚本来控制提交等操作,达到权限控制的目的。Gitolite就是这个工具。

这里也不介绍Gitolite了,不要把有限的生命浪费到权限斗争中。

参考链接?->廖雪峰的网站


文章作者:糖醋鱼

版权声明:转载请注明来自糖醋鱼的博客


<think>我们正在讨论如何在Git服务器上查看提交记录中的作者信息。虽然Git服务器本身通常不直接提供交互式命令行界面(用户通常通过本地Git命令或Web界面访问),但我们可以通过以下几种方式实现: ###1. **通过本地Git命令查看远程服务器提交的作者信息**即使提交记录在远程服务器上,我们也可以先在本地克隆仓库,然后使用标准`git log`命令查看作者信息。```bash#克隆远程仓库(如果尚未克隆)gitclone <远程仓库URL>cd <仓库目录>#查看提交历史(含作者信息)git log--pretty=format:"%h -%an, %ar: %s"```- `%h`:提交哈希(简短形式)- `%an`:作者姓名- `%ar`:相对提交时间(如"2 daysago")- `%s`:提交信息主题###2. **通过Git服务器Web界面查看**主流Git托管服务(如GitHub、GitLab、Bitbucket)都提供Web界面直接查看提交记录及作者信息:-**GitHub**:进入仓库 →"Commits"标签页 →列表显示每次提交的作者头像/姓名。-**GitLab**:仓库→ "Repository"→ "Commits" →显示作者列。- **Bitbucket**:仓库 →"Commits"→左侧显示作者信息。 ###3. **在Git服务器命令行查看(需服务器访问权限)**如果直接登录Git服务器(如自建GitLab服务器),可进入仓库存储目录查看:```bash#进入仓库的git目录(通常位于 /var/opt/gitlab/git-data/repositories/...)cd /path/to/bare/repo.git#使用Git命令查看日志(需指定--git-dir)git--git-dir=. log--pretty=format:"%an %ae %ad"-n10```- `%ae`:作者邮箱- `%ad`:完整提交日期>⚠️注意:直接操作服务器仓库有风险,建议优先通过本地克隆或Web界面操作。###4.**通过API获取作者信息(适用于自动化)**例如使用GitHubAPI获取提交记录:```bashcurl-H"Authorization: tokenYOUR_TOKEN" \https://api.github.com/repos/:owner/:repo/commits```API返回的JSON数据中包含`commit.author`字段[^1]。 ---###关键点总结|方法|适用场景|是否需要权限| |--------------------|--------------------------------|--------------------| |本地`git log`|日常开发查看记录|只需克隆权限|| Web界面|快速可视化查看|网页访问权限| |服务器命令行|服务器维护/无Web界面时|服务器SSH访问权限| |API调用|集成到自动化系统|API访问令牌| >引用说明:直接操作服务器Git仓库的方法参考了Git内部管理机制[^1],但实际生产环境强烈建议通过安全渠道(如GitLab管理后台)操作。§§相关问题§§1.如何批量导出Git仓库的所有提交记录及作者信息? 2. Git提交记录中的作者信息和提交者信息(committer)有什么区别? 3.如何修改Git历史提交中的作者信息(如邮箱更正)?</think>### 如何在 Git 服务器上查看提交记录中的作者信息 在 Git 服务器上查看提交记录的作者信息,主要通过以下方法实现: --- #### 1. **通过 Git 命令查看(需访问服务器或克隆仓库)** ```bash # 克隆远程仓库到本地 git clone <远程仓库地址> # 进入仓库目录查看提交历史(含作者信息) git log --pretty=format:"%h | %an <%ae> | %ad | %s" ``` - **输出示例**: ``` a1b2c3d | Alice <alice@example.com> | Mon Jan 1 12:00:00 2023 +0800 | 修复登录问题 b5e6f7g | Bob <bob@domain.com> | Sun Dec 31 10:30:00 2022 +0800 | 更新配置文件 ``` - **关键参数**: - `%an`:作者姓名 - `%ae`:作者邮箱 - `%ad`:提交日期 - `%h`:提交哈希缩写 > ⚠️ 注意:需要具有仓库访问权限才能克隆[^1]。 --- #### 2. **通过 Git 服务器 Web 界面查看** 主流 Git 平台均提供可视化提交历史: - **GitHub/GitLab/Bitbucket**: 1. 进入仓库 → "Commits" 标签页 2. 提交列表直接显示作者头像/姓名 3. 点击单条提交查看详细作者信息 ![GitHub 提交记录界面示例](https://docs.github.com/assets/cb-20363/images/help/repository/commit-view.png) (图片来源:GitHub Docs) --- #### 3. **在服务器直接查看(需 SSH 访问权限)** 若可登录 Git 服务器: ```bash # 进入仓库目录(通常为 /var/opt/gitlab/git-data/... 或 /home/git/repositories/) cd /path/to/repo.git # 查看提交记录 git log --all --format="%an %ae %ad" ``` > 此操作需服务器管理员权限,且路径因 Git 服务而异(GitLab/Gitea 等路径不同)[^1]。 --- #### 4. **通过 API 获取(适合自动化)** 例如使用 GitHub API: ```bash curl -H "Authorization: token YOUR_TOKEN" \ https://api.github.com/repos/:owner/:repo/commits ``` 返回的 JSON 数据中包含: ```json "commit": { "author": { "name": "Alice", "email": "alice@example.com", "date": "2023-01-01T04:00:00Z" } } ``` --- ### 关键区别:作者(Author) vs 提交者(Committer) | 角色 | 说明 | 查看命令参数 | |------------|-------------------------------|--------------------| | **作者** | 实际编写代码的人 | `%an` (姓名), `%ae` (邮箱) | | **提交者** | 执行 `git commit` 操作的人 | `%cn`, `%ce` | > 在团队协作中,两者可能不同(如使用 `git cherry-pick` 时)[^1]。 --- ### 注意事项 1. 邮箱一致性:确保开发者正确配置 `git config user.email`,否则无法关联账号[^3] 2. 权限控制: - 公共仓库:所有用户可查看作者信息 - 私有仓库:需项目成员权限[^1] 3. 历史修改:如需修改历史作者信息,需用 `git filter-branch`(高风险操作)[^4]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值