Linux 下一步步安装 Git Server

本文详细介绍如何在服务器上安装Git,并逐步指导如何初始化repository、进行初次提交及日常使用。此外,还介绍了四种不同的共享repository的方式:Local、SSH、Git和HTTP,并提供了具体的配置步骤。

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

    版 本控制系统经历 CVS , SVN, 现在到了 Git 的世界。 Git 与 CVS, SVN 相比有很多的优势,其中最为人津津乐道的就是 branch 的切换都是在本地执行,速度非常之快,非常利于分布式开发进程。现在也是开源世界了最流行的版本控制系统。比如:Fedora 社区(http://git.fedorahosted.org/git), JBoss AS 7 的 source(https://github.com/jbossas/jboss-as) 等。

 

      GitHub 提供免费的 Git server, 但是它仅仅针对 Public 的 repository 是免费的,如果你想有你个人的 Git repsotories, 就需要交费了。 但是, 依照国人一向不信他人,只信自己的美德, 应该很少有人把机密的代码交由外人掌管吧,万一 GitHub 被黑了, 那岂不是一起遭殃? 怎么办呢, 自己建立个 Server 不就完了吗。

 

第一步: 安装 Git

 

NOTE:
接下来的操作都是在 Server 机器上运行

 

      Fedora 下运行:

yum install git-core

 

      Ubuntu 下运行:

apt-get install git-core

 

 

第二步: 初始化一个 repository

 

[lgao@lgao myclone]$ cd /home/lgao/sources/my_own/repositories/
[lgao@lgao repositories]$ git init --bare myprj
Initialized empty Git repository in /home/lgao/sources/my_own/repositories/myprj/.git/

 

    指定 --bare,当前 repository 下就只有 .git/ 下的 objects,而没有真实文件。一般在 Server 端。

 

第三步: 初始化提交

 

    当一个 repository 初始化后, 里面什么也没有。我们需要建立个 master branch,才能被正常 clone 到其他地方。

[lgao@lgao myclient]$ mkdir initial.commit
[lgao@lgao myclient]$ cd initial.commit/
[lgao@lgao initial.commit]$ git init
Initialized empty Git repository in /home/lgao/sources/my_own/myclient/initial.commit/.git/
[lgao@lgao initial.commit]$ git remote add origin /home/lgao/sources/my_own/repositories/myprj/
[lgao@lgao initial.commit]$ touch Readme
[lgao@lgao initial.commit]$ git add Readme
[lgao@lgao initial.commit]$ git commit -m "initial commit"
[master (root-commit) 032dad8] initial commit
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 Readme
[lgao@lgao initial.commit]$ git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 206 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /home/lgao/sources/my_own/repositories/myprj/
 * [new branch]      master -> master
 第四步  正常使用

 

      经过初始化提交过程,相当于激活了该 repository, 我们可以正常使用了。

[lgao@lgao myclient]$ git clone /home/lgao/sources/my_own/repositories/myprj/ 
Cloning into 'myprj'...
done.
[lgao@lgao myclient]$ cd myprj
[lgao@lgao myprj]$ l
total 0
-rw-rw-r-- 1 lgao lgao 0 Jan 21 15:15 Readme
[lgao@lgao myprj]$ vim Readme 
[lgao@lgao myprj]$ git commit -m "modify readme" Readme
[master 1bf69b4] modify readme
 1 files changed, 1 insertions(+), 0 deletions(-)
[lgao@lgao myprj]$ git push
Counting objects: 5, done.
Writing objects: 100% (3/3), 247 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /home/lgao/sources/my_own/repositories/myprj/
   032dad8..1bf69b4  master -> master
 

 

 第五步   与他人共享 Repository

 

       按照上面的步骤,我们已经可以使用 Git 了。 但是 Git repository 的 URL 都是本地目录, 怎么能方便的让合作伙伴方便的访问该 Repository 呢? 这就要介绍下 Git 支持的 4 中传输协议了: Local, SSH, Git, HTTP。 我们一个个的介绍:

Local

  Local 就是指本地文件系统,可以是本机器文件,也可以是通过 NFS 加载的网络映射。这种情形下与人共享就是把你的 repository 所在的目录作为 NFS 共享出去,让能访问到你机器的人像本地文件一样操作。具体怎么 NFS 共享超出本文范围,不加讨论(有兴趣的请参考: http://docs.fedoraproject.org/en-US/Fedora/14/html/Storage_Administration_Guide/ch-nfs.html )。不过不推荐这种方式共享, 因为效率太低。

SSH

   SSH 协议大家都很熟悉,只要你的 Server 能 ssh 登录就可以。假设你的 Server 可以远程 ssh 登录,我们看如何从 Server clone 出 Git Repository:

[lgao@lgao myclient]$ git clone lgao@10.66.14.143:git_repos/myprj from_remote
Cloning into 'from_remote'...
lgao@10.66.14.143's password: 
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
  也就是说只要你在 Server 端给一个用户创建完帐号后, 他就可以 clone 代码了。 具体的权限设置和 Linux 下权限配置是一样的。 一般跟一组 repositories 指定一个新的 group, 把新建的用户加入到该 group 后就可以有相应的读写权限了。
   还有另外一种方式,是通过提交公钥到 Server 端来获得访问和提交权限,而不需要创建用户。 具体细节本文不加讨论。
Git

   该协议一般只是只读权限。

 

   第一步需要安装 git-daemon:

[root@lgao ~]# yum install git-daemon

 

   接着启动 git-daemon:

[lgao@lgao initial.commit]$ git daemon --base-path=/home/lgao/sources/my_own/repositories --export-all

 

    在你的工程下创建 git-daemon-export-ok 文件:

[lgao@lgao repositories]$ cd myprj
[lgao@lgao myprj]$ touch git-daemon-export-ok

 

     现在就可以通过 Git 协议 clone repository 了:

[lgao@lgao test]$ git clone git://lgao.nay.redhat.com/myprj
Cloning into 'myprj'...
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
HTTP

   该协议一般只是只读权限。GitWeb 包提供 CGI , 它可以被部署到任何支持静态 web 服务的服务器中去。我们还以最常见的 Apache 为例:

 

    版本信息:

Httpd:Apache/2.2.21 (Fedora) 
Git:  git version 1.7.7.5
GitWeb:1.7.7.5-1.fc16
 

    安装 Httpd 和 gitweb:

[lgao@lgao initial.commit]$ sudo yum install httpd gitweb
 

    修改 /etc/gitweb.conf:

[lgao@lgao repositories]$ vim /etc/gitweb.conf
修改:
our $projectroot = "/home/lgao/sources/my_own/repositories"; 

 

    在 httpd 的 DocumentRoot 所在目录创建 Link 文件:

[root@lgao DCIM]# cd /var/www/html
[root@lgao html]# ln -s /home/lgao/sources/my_own/repositories/ git
[root@lgao html]# chown -R lgao.lgao git
 

    修改 httpd.conf 中的 user 和 group:

User lgao
Group lgao

 

   重启 httpd:

[root@lgao httpd]# service httpd restart
Restarting httpd (via systemctl):                          [  OK  ]

 

    OK 了, 现在就可以访问了:

 

    你可以修改 Server 机器下 <Your Repo>/description ,这样可以显示在 git web 页面上。

 

    修改 <Your Repo>/config , 加上 owner 和 url:

 

 

[gitweb]
        owner = Your Name <name@example.com>
        url = git://lgao.nay.redhat.com/myprj
 

 

之后,我们再看看截图:

 

 

 

 

<think>嗯,用户想在WSL2的Ubuntu 22.04上安装GitLab,我需要一步步帮他理清楚流程。首先,我应该确认GitLab是否支持直接安装在WSL环境中。通常来说,GitLab官方推荐使用物理机或虚拟机,但WSL2其实已经具备完整的Linux内核,可能可以安装。 接下来,用户可能需要先确保系统更新。我应该提醒他们运行sudo apt update和sudo apt upgrade,确保所有包都是最新的,避免安装时的依赖问题。 然后,安装依赖项是关键。GitLab需要一些基础工具,比如curl、openssh-server、ca-certificates、postfix这些。特别是postfix用于邮件通知,可能需要配置,用户可能需要选择“Internet Site”并设置域名,但如果在WSL中,可能不需要实际配置,或者可以跳过? 接下来,添加GitLab的仓库源。使用curl导入仓库的GPG密钥,然后添加apt源。之后,运行sudo apt update更新源,再安装gitlab-ee或gitlab-ce包。这里用户可能需要选择社区版还是企业版,通常社区版是免费的,所以应该推荐gitlab-ce。 安装完成后,需要配置GitLab。编辑/etc/gitlab/gitlab.rb文件,修改external_url为http://localhost或者宿主机的IP地址,这样可能方便从Windows主机访问。不过WSL2的网络需要特别注意,可能需要配置防火墙或端口转发。 运行sudo gitlab-ctl reconfigure应用配置,这个过程可能会比较久,因为要启动所有服务。之后,检查服务状态,确认是否正常运行。 初始化过程中,用户需要设置root密码,可以通过gitlab-rake命令或者首次访问网页界面。然后访问http://localhost即可登录。如果遇到端口冲突,可能需要修改gitlab.rb中的端口设置,比如改为8080,然后在WSL中配置防火墙,或者在Windows中设置端口转发,比如netsh interface portproxy add v4tov4监听端口。 另外,WSL2的内存管理可能需要注意,GitLab比较吃资源,建议分配足够的内存,至少4GB以上,避免运行缓慢或崩溃。长期运行的话,可能还需要配置自动启动服务,或者考虑使用systemd,但Ubuntu 22.04的WSL默认可能没有启用systemd,需要额外配置。 用户可能还会遇到无法从宿主机访问的问题,这时候需要检查WSL的防火墙设置,确保端口开放,或者检查Windows防火墙是否阻止了连接。另外,WSL2的IP是动态的,每次启动可能会变,所以使用localhost可能更可靠,或者设置静态IP。 总结下来,步骤应该是:更新系统,安装依赖,添加仓库,安装GitLab,配置external_url,处理端口和网络问题,然后初始化设置。同时提醒用户资源消耗和可能的网络配置问题,确保他们能够顺利访问安装好的GitLab实例。</think>以下是在WSL2 Ubuntu 22.04中安装GitLab的详细步骤: --- ### 1. 系统更新 ```bash sudo apt update && sudo apt upgrade -y sudo apt install -y curl openssh-server ca-certificates postfix ``` * 安装postfix时选择"Internet Site" * 域名可保持默认(或设置为`localhost`) --- ### 2. 添加GitLab仓库 ```bash curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash ``` --- ### 3. 安装GitLab社区版 ```bash sudo EXTERNAL_URL="http://gitlab.example.com" apt-get install gitlab-ce ``` (实际使用时替换为自己的域名或IP) --- ### 4. 修改配置文件 ```bash sudo nano /etc/gitlab/gitlab.rb ``` 修改以下参数: ```ruby external_url 'http://localhost' # 或宿主机IP nginx['listen_port'] = 8080 # 避免端口冲突(可选) ``` --- ### 5. 应用配置 ```bash sudo gitlab-ctl reconfigure ``` (首次执行需10-15分钟) --- ### 6. 防火墙设置(WSL2无需操作) 默认已开放端口,但需确保: - Windows防火墙允许`80/443`端口 - WSL2端口转发: ```powershell netsh interface portproxy add v4tov4 listenport=80 connectaddress=localhost ``` --- ### 7. 访问GitLab 浏览器访问: ```bash http://localhost # 或配置的IP地址 ``` 首次登录需设置root密码(8位以上) --- ### 常用命令 ```bash sudo gitlab-ctl start # 启动 sudo gitlab-ctl stop # 停止 sudo gitlab-ctl restart # 重启 ``` --- ### 注意事项 1. 内存要求:至少4GB可用内存 2. 存储路径:默认存储在`/var/opt/gitlab` 3. 备份配置: ```bash sudo gitlab-rake gitlab:backup:create ``` 4. 升级方法: ```bash sudo apt update && sudo apt install gitlab-ce ``` --- ### 常见问题解决 **Q1: 端口冲突** ```bash sudo nano /etc/gitlab/gitlab.rb ``` 修改`nginx['listen_port']`后重新配置 **Q2: 502错误** 检查内存是否不足: ```bash free -h ``` 建议分配更多内存给WSL2(修改`.wslconfig`文件) **Q3: 邮件服务配置** 在`gitlab.rb`中配置SMTP: ```ruby gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.example.com" gitlab_rails['smtp_port'] = 587 # ...其他SMTP参数 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值