整体流程是:

安装msysgit → 安装及配置copssh → 粘贴某些文件 → git服务器测试

一、安装msysgit

安装一直next选择默认设置就好。
安装路径最好选择在每个盘的根目录下

Windows 搭建git仓库服务_git

安装完之后打开git bash,进入命令行

Windows 搭建git仓库服务_ssh_02

配置git的user.name和user.email

$ git config --global user.name "yourname"
$ git config --global user.email "youremail"

用以下命令生成公钥私钥,它们被放到默认当前用户目录下的.ssh文件夹中,打开生成的id_rsa.pub复制里面的公钥备用

ssh-keygen -t rsa

Windows 搭建git仓库服务_windows_03

二、安装及配置copssh

下载网址为:https://www.fxxz.com/soft/107135.html

安装默认设置就可以

安装完成之后,打开其中的copssh control panel,选择第二行的users选项,第一次进入一般为空,点右边的add

Windows 搭建git仓库服务_服务器_04


接着点击“Forward”

在User中选择一个用户后,“Forward”

把options的第一个选项“Allow password authentication”勾去掉,因为要用公私钥来登陆,不用密码登陆,forward。

“Apply”完成用户添加。

添加后应该如上图。

Windows 搭建git仓库服务_git_05


点击keys,这里就是ssh保存的公钥。第一次点开应该是空的,就需要把刚刚在git bash中准备好的公钥放在这里

找到copssh安装目录,打开home,打开刚刚选择的用户名,打开.ssh

新建一个authorized_keys的文本(没有后缀!!),把准备好的公钥粘贴到里面,保存退出

Windows 搭建git仓库服务_服务器_06


这时回到copssh control panel,点击keys再关闭,再次打开就会有一个公钥信息了

(我的再次打开也没有公钥,回去刚刚的位置一看,它创建了一个新文件但里面没有我的公钥,于是我又把公钥复制到这个新文件里,再回到copssh公钥就出来了,之后添加客户端都是在这里添加公钥)

Windows 搭建git仓库服务_windows_07


现在就可以用私钥来登录ssh服务器了

打开git bash,输入命令

ssh 刚刚选择用户名@你的ip地址

登录成功如下:

lenovo@DESKTOP-GLB2KSO MINGW64 ~
$ ssh lenovo@192.168.2.6
Last login: Thu May 13 14:26:36 2021 from desktop-glb2kso

这里查看自己的IP地址可以:Win+R → cmd → 输入ipconfig → 里面的Ipv4地址就是

Windows 搭建git仓库服务_Windows 搭建git仓库服务_08

登录成功后可以使用Linux的命令,但是git的命令还不能使用

三、粘贴一些文件

KaTeX parse error: Undefined control sequence: \bin at position 4: Git\̲b̲i̲n̲目录(Git也就是git安装包的位置)下的
 git.exe ,
 git-receive-pack.exe ,
 git-upload-archive.exe ,
 git-upload-pack.exe
 libiconv-2.dll

Windows 搭建git仓库服务_服务器_09

复制到$ICW\bin目录(copssh的安装目录)下。

Windows 搭建git仓库服务_git_10ICW下

Windows 搭建git仓库服务_git_11


把 $Git\mingw64\libexec\git-core中的git-upload-pack.exe 文件复制到 $git/usr/bin/ 下

至此,配置完毕

四、git服务器测试及其简单使用

创建一个git仓库

lenovo@DESKTOP-GLB2KSO MINGW64 ~
$ ssh lenovo@192.168.2.6                #连接ssh服务器,ip会变,如果没有这个ip的公钥会连接不上,要重新生成一遍公钥
Last login: Thu May 13 16:03:56 2021 from desktop-glb2kso

lenovo@DESKTOP-GLB2KSO ~
$ mkdir test.git                        #新建文件作为git remote仓库,新建的文件地址在C:\ICW\home\lenovo

lenovo@DESKTOP-GLB2KSO ~
$ cd test.git

lenovo@DESKTOP-GLB2KSO ~/test.git
$ git init --bare                       #初始化仓库,指定该仓库为裸仓库(没有工作区)

lenovo@DESKTOP-GLB2KSO ~/test.git
$ cd ..                                #返回上一级

lenovo@DESKTOP-GLB2KSO ~
$ ls                                   #展开C:\ICW\home\lenovo中的内容
huluobo.git  test.git  myhome  myhome.lnk  no  texxt.git

lenovo@DESKTOP-GLB2KSO ~
$ exit                                 #退出ssh服务器
logout
Connection to 192.168.2.6 closed.

从服务器克隆这个仓库到D盘

lenovo@DESKTOP-GLB2KSO ~
$ cd d
-bash: cd: d: No such file or directory

lenovo@DESKTOP-GLB2KSO ~
$ cd d:

lenovo@DESKTOP-GLB2KSO /cygdrive/d
$ mkdir test1                               #新建文件存放克隆仓库

lenovo@DESKTOP-GLB2KSO /cygdrive/d
$ cd test1

lenovo@DESKTOP-GLB2KSO /cygdrive/d/test1
$ git clone lenovo@192.168.2.6:test.git    #还要加上 :test.git 
                                            #这里clone的地址user@192.168.xx.xx已经是在目录C:\ICW\home\lenovo下
                                            #所以冒号后面写上test.git的相对路径就好了,
                                            #这个test.git就是我们上面建的remote仓库  
                                            #clone下来的仓库一般会去掉原仓库的.git来命名
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (3/3), done.

也可以从git上clone托管代码下来测试一下

lenovo@DESKTOP-GLB2KSO MINGW64 /d/test1 (master)
$ git clone 
Cloning into 'git-osc'...
remote: Enumerating objects: 938, done.
remote: Counting objects: 100% (938/938), done.
remote: Compressing objects: 100% (901/901), done.
remote: Total 938 (delta 424), reused 79 (delta 18), pack-reused 0
Receiving objects: 100% (938/938), 707.01 KiB | 1.68 MiB/s, done.
Resolving deltas: 100% (424/424), done.

push测试:
注意:如果是在刚刚克隆下来的test仓库里面修改,它已链接origin remote仓库,也就是我们的C:\ICW\home\lenovo/test.git
如果是新建的文件要push,那么需要设定origin remote才可以
下面有#的命令是第一种情况的操作,带*的是两种情况都需要的操作

lenovo@DESKTOP-GLB2KSO MINGW64 ~
$ cd d:

lenovo@DESKTOP-GLB2KSO MINGW64 /d
$ cd test1

#lenovo@DESKTOP-GLB2KSO MINGW64 /d/test1 (master)
$ cd test

*lenovo@DESKTOP-GLB2KSO MINGW64 /d
$ touch a b c

*lenovo@DESKTOP-GLB2KSO MINGW64 /d/test1 (master)
$ git status                                     #输入该命令查看版本状态,有没有没有add, commit的文件
On branch master
nothing to commit, working tree clean

*lenovo@DESKTOP-GLB2KSO MINGW64 /d/test1 (master)
$ git add
Nothing specified, nothing added.
hint: Maybe you wanted to say 'git add .'?
hint: Turn this message off by running
hint: "git config advice.addEmptyPathspec false"

*lenovo@DESKTOP-GLB2KSO MINGW64 /d/test.git (master)
$ git add .                                  #跟踪所有修改过的文件的(一个新的文件,需要被 add一次之后,
                                             #本地git才会跟踪该文件),也可以直接 输入文件名,单独添加。

*lenovo@DESKTOP-GLB2KSO MINGW64 /d/test.git (master)
$ git commit -m "just for test"              #-m后面输入的是本次提交的说明,可以输入任意内容
On branch master                             #提交会自动签名之前的global user.name 和Email
nothing to commit, working tree clean

这里是第二种情况的额外操作:关联裸库
lenovo@DESKTOP-GLB2KSO MINGW64 /d/test1 (master)
$ git remote add origin 192.168.3.5:/C:/ICW/home/lenovo/test.git

lenovo@DESKTOP-GLB2KSO MINGW64 /d/yi.git (master)
$ git remote add origin c:/test.git

lenovo@DESKTOP-GLB2KSO MINGW64 /d/yi.git (master)
$ git remote -v                        #查看origin remote
origin  c:/test.git (fetch)
origin  c:/test.git (push)

最终的push操作:
*lenovo@DESKTOP-GLB2KSO MINGW64 /d/yi.git (master)
$ git push origin master              #master是默认分支名,可以更改到你要添加的分支
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 12 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 387 bytes | 387.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To c:/test.git

出现下面这种错误:
lenovo@DESKTOP-GLB2KSO MINGW64 /d/test.git (master)
$ git push origin master                             #origin是分支名
/usr/bin/git-receive-pack.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
需要配置环境变量来解决:
我的copsssh安装包ICW在C盘下,git安装包也在C盘下,以下路径都需要根据自己的情况修改
我们需要做的是
在C:\ICW\home\lenovo\.bashrc文件中,最后加上PATH=/cygdrive/C/Git/mingw64/libexec/git-core:/cygdrive/C/ICW/bin:${PATH}
#注意PATH中的C盘是没有冒号的,cygdrive不能删除