以前部署的gitlab,採用ssh方式鏈接gitlab,在客戶機上產生公鑰上傳到gitlab的SSH-Keys裏,git clone下載和git push上傳都沒問題,這種方式很安全。git
後來應開發同事要求採用http方式鏈接gitlab,那麼首先將project工程的「Visibility Level」改成「Public」公開模式,要保證gitlab的http端口已對客戶機開放。web
後面發現了一個問題:
http方式鏈接gitlab後,git clone下載沒有問題,可是git push上傳有報錯:
error: The requested URL returned error: 401 Unauthorized while accessing http://git.xqshijie.net:8081/weixin/weixin.git/info/refs
fatal: HTTP request failed安全
或者
The requested URL returned error: 403 Forbidden while accessingssh
實例以下:
假設git的url爲http://git.wangshibo.net
[root@test-huanqiu ~]# mkdir /root/git
[root@test-huanqiu ~]# cd /root/git
[root@test-huanqiu git]# git init .
[root@test-huanqiu git]# git clone http://git.wangshibo.net:8081/weixin/weixin.git
Initialized empty Git repository in /root/git/weixin/.git/
remote: Counting objects: 10, done.
remote: Compressing objects: 100% (6/6), done.
remote: Total 10 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (10/10), done.gitlab
上面能夠看出,已經能成功git clone下代碼
[root@test-huanqiu git]# ll
total 4
drwxr-xr-x. 3 root root 4096 Nov 30 15:58 weixin
[root@test-huanqiu git]# cd weixin/
[root@test-huanqiu weixin]# ll
total 8
-rw-r--r--. 1 root root 15 Nov 30 15:58 heihei
-rw-r--r--. 1 root root 1 Nov 30 15:38 README.md測試
如今測試下git push
[root@test-huanqiu weixin]# git rm heihei
[root@test-huanqiu weixin]# touch test.file
[root@test-huanqiu weixin]# echo "123456" > test.file
[root@test-huanqiu weixin]# git add .
[root@test-huanqiu weixin]# git commit -m "this is a test"
[root@test-huanqiu weixin]# git push //或者git push -u origin master
error: The requested URL returned error: 401 Unauthorized while accessing http://git.wangshibo.net:8081/weixin/weixin.git/info/refsfetch
fatal: HTTP request failedui
解決辦法:
在代碼的.git/config文件內[remote "origin"]的url的gitlab域名前添加gitlab註冊時的「用戶名:密碼@」
另外發現這個用戶要在對應項目下的角色是Owner或Master才行,若是是Guest、Reporter、Developer,則以下操做後也是不行。
以下,gitlab的用戶名是wangshibo,假設密碼是HU@wew12378!h8this
查看gitlab界面裏的登錄用戶名:url
而後修改代碼裏的.git/config文件
[root@test-huanqiu weixin]# cd .git
[root@test-huanqiu .git]# cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://git.wangshibo.net:8081/weixin/weixin.git
[branch "master"]
remote = origin
merge = refs/heads/master
修改以下:
[root@test-huanqiu .git]# cat config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = http://wangshibo:HU@wew12378!h8@git.wangshibo.net:8081/weixin/weixin.git
[branch "master"]
remote = origin
merge = refs/heads/master
而後再次git push,發現能夠正常提交了!
[root@test-huanqiu weixin]# git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 297 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://wangshibo:HUIhui1987521@git.xqshijie.net:8081/weixin/weixin.git
8fcb559..6c97b56 master -> master
------------------------------------------------------------------------------------------------------------------------------------
能夠建立一個用戶名做爲admin管理員,而後將這個用戶名和密碼添加到項目代碼的.git/config裏面,如上操做!
若是不是管理員,則至少對當前代碼具備owner或master權限。
這樣,在.git/config文件裏添加這個用戶名和密碼權限,而後其餘人在git push的時時候都使用這個文件進行覆蓋。
其餘人在首次git clone下載代碼的時候,須要進行--global全局配置,而後就能夠在gitweb控制檯裏追蹤到每一個操做者的提交記錄了!