自己搭建一个git服务器,需要什么?
什么都不需要,用的git就可以了。
git init --bare #创建一个git库;
git push origin dev1:dev1 #将本地的dev分支,推送到远端,在远端创建一个dev分支
git push --set-upstream origin dev1 #将本地的dev分支和远端绑定。后续在本地dev分支中,直接git push就会自动推送到远端dev分支中。
[root@cgsl]# mkdir testgit
[root@cgsl]# cd testgit
[root@cgsl]# git init --bare
初始化空的 Git 仓库于 /media/B/testgit/
[root@cgsl]# exit
Connection to cgsl closed.
$ git clone ssh://root@cgsl:/media/B/testgit
Cloning into 'testgit'...
warning: You appear to have cloned an empty repository.
Checking connectivity... done.
$ cd testgit/
$ vi t.txt
$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
t.txt
nothing added to commit but untracked files present (use "git add" to trac
$ git add .
$ git commit -m"tt"
[master (root-commit) 369c798] tt
1 file changed, 1 insertion(+)
create mode 100644 t.txt
$ git push
Counting objects: 3, done.
Writing objects: 100% (3/3), 217 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://root@cgsl:/media/B/testgit
* [new branch] master -> master
$ git checkout -b dev1
Switched to a new branch 'dev1'
$ git push origin dev1:dev1
Total 0 (delta 0), reused 0 (delta 0)
To ssh://root@cgsl:/media/B/testgit
* [new branch] dev1 -> dev1
$ git branch
* dev1
master
$ git branch -a
* dev1
master
remotes/origin/dev1
remotes/origin/master
$ vi 2.txt
$ git add .
$ git commit -m"dev"
[dev1 244361f] dev
1 file changed, 1 insertion(+)
create mode 100644 2.txt
$ git push
fatal: The current branch dev1 has no upstream branch.
To push the current branch and set the remote as upstream, use
git push --set-upstream origin dev1
$ git push --set-upstream origin dev1
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 276 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To ssh://root@cgsl:/media/B/testgit
369c798..244361f dev1 -> dev1
Branch dev1 set up to track remote branch dev1 from origin.
$ git push
Everything up-to-date
$ git status
On branch dev1
Your branch is up-to-date with 'origin/dev1'.
nothing to commit, working directory clean
gaofeng 2020.2.28
git push origin dev ---origin 是主机名,其实就是一虚拟主机名,随便写的 dev是分支名
$ git remote add pb2 ssh://root@cgsl:/media/B/testgit ---添加一个主机名
$ git remote -v
origin ssh://root@cgsl:/media/B/testgit (fetch)
origin ssh://root@cgsl:/media/B/testgit (push)
pb2 ssh://root@cgsl:/media/B/testgit (fetch)
pb2 ssh://root@cgsl:/media/B/testgit (push)
$ git push --常用的是这个
$ git push origin dev1 --常用的是这个 将dev1分支推送到dev1分支
$ git push pb2 dev2 -- 将本地dev2分支,推送到pb2的dev2上
$ git push origin dev1:dev2 --将本地的dev1 推送到origin的dev2上
MINGW32 /d/tt/testgit (dev2)
$ git push origin master --如果当前处在dev2分支,是不能将master推送到master分支的
error: src refspec master does not match any.
error: failed to push some refs to 'ssh://root@cgsl:/media/B/testgit'
MINGW32 /d/tt/testgit (dev2)
$ git push origin dev2:master --必须这样写,才可以把当前分支推送到master分支
Total 0 (delta 0), reused 0 (delta 0)
To ssh://root@cgsl:/media/B/testgit
* [new branch] dev2 -> master
$ git push origin -d dev1 --删除远程分支
To ssh://root@cgsl:/media/B/testgit
- [deleted] dev1
$ git branch -d dev2 --删除本地分支
Deleted branch dev2 (was f60f2b8).
$ git reflog show --date=iso origin/dev2 --查看分支的创建时间
5bea50d refs/remotes/origin/dev2@{2020-02-28 17:02:22 +0800}: update by push
21eaa6b refs/remotes/origin/dev2@{2020-02-28 16:54:52 +0800}: update by push
10041985@A23353452 MINGW32 /d/tt/testgit (master)
$ git reflog show --date=iso pb2/dev2 --查看分支的创建时间
f60f2b8 refs/remotes/pb2/dev2@{2020-02-28 17:05:55 +0800}: update by push
git、 ssh 、 rsa公钥 的关系
1、以gitbub为例,登录gitbub要一个用户名,git config中要配置一个用户名,rsa密钥要一个用户名
这三个用户名必须一样吗?git log中显示的是哪个?
真正的用户名,只有第一个,假如叫 jim。gitbub要求你给这个用户名绑定一个公钥。下载git clone,git push时,ssh就会使用私钥和gitbub对话,gitbub看到自己存储了他的公钥就信任了这个用户,且因为用户名绑定,所以知道当前登录的用户是 jim。
git commit 时,记录的用户名是git config中的用户名。git push时,commit信息也会被提交上去。
在linux机器上,设置ssh免密码登录。 需要把 公钥 拷贝到 linux 某个用户的.ssh/authorized_keys文件中。ssh登录时,比如 ssh abc@192.168.4.5, 则linux在abc的authorized_keys文件中找对应的公钥。找到后,验证通过。你在Linux中的当前用户名就是abc。