前些日子因为某些原因,需要在windows上创建一个remote仓库。
由于实在是太麻烦而且时间紧急,就直接用了gitstack。
发现这个东西居然需要付费,未认证时只能创建两个用户。
其实对我而言足够了,但不是长久之计。
好在后来又有了一台机器装了linux,这就回到正轨。
因为我也是一直使用别人弄的remote仓库,这次便把创建过程记录下来。
git init是第一步,我经常很理所当然地进行如下操作:
[[email protected] ~]# mkdir myProject [[email protected] ~]# cd myProject/ [[email protected] myProject]# git init Initialized empty Git repository in /root/myProject/.git/ [[email protected] myProject]# touch myProject.md [[email protected] myProject]# echo "##myProject">>myProject.md [[email protected] myProject]# git add . [[email protected] myProject]# git commit -m"add md file" [[email protected] myProjet]# git remote add origin ssh://[email protected]/~/myProject/.git [[email protected] myProjet]# git remote -v origin ssh://[email protected]/~/myProject/.git (fetch) origin ssh://[email protected]/~/myProject/.git (push)
有一点需要注意,git init还是git init --bare,两者的区别是什么?
加了--bare的就是bare repository嘛 (╯‵□′)╯︵┻━┻
简单来说,bare仓库的意义在于在服务器集中管理,以管理多个开发者的提交。
即使没有加--bare,开发人员仍然可以对该工程进行clone,只不过向这个仓库push时会提示如下信息并失败:
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsistent
remote: error: with what you pushed, and will require ‘git reset --hard‘ to match
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set ‘receive.denyCurrentBranch‘ configuration variable to
remote: error: ‘ignore‘ or ‘warn‘ in the remote repository to allow pushing into
remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some
remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set
remote: error: ‘receive.denyCurrentBranch‘ configuration variable to ‘refuse‘.
若只是在server中对本地进行push则没有问题,也就是说git init只是给自己一个人玩的。
git init后的目录下包括两样东西,.git和真实的工作目录,而bare仓库下仅仅是.git。
也就是说,上面第一步就错了,对于init,只要在目录下git init --bare就足够了,也不需要remote add。
这样就可以clone并push了
$ git clone [email protected]:myProject Cloning into ‘myProject‘... warning: You appear to have cloned an empty repository. Checking connectivity... done $ cd myProject/ $ touch pushTest.txt $ echo "push test">pushTest.txt $ git add . warning: LF will be replaced by CRLF in pushTest.txt. The file will have its original line endings in your working directory. $ git commit -m"test file" [master (root-commit) 05f0722] test file warning: LF will be replaced by CRLF in pushTest.txt. The file will have its original line endings in your working directory. 1 file changed, 1 insertion(+) create mode 100644 pushTest.txt $ git push
clone或者push时会提示输入密码,输入个密码也未尝不可,
几个开发者使用一个用户名密码也没什么,每个人一套各自的用户名密码就上几次userAdd也没什么意义。
不如让开发者生成key pair并把公钥给我管理。
可以通过以下命令生成(rsa或者dsa,或者看情况加入其他参数):
ssh-keygen -t rsa
执行后会在用户目录下的.ssh下生成相应密钥,将.pub文件发给管理员即可。
假设管理员拿到的文件名为id_rsa.test.pub并放在用户目录下,执行如下操作加入权限并确认:
[[email protected] ~]# cat id_dsa.test.pub >> ~/.ssh/authorized_keys [[email protected] ~]# cd .ssh/ [[email protected] .ssh]# cat authorized_keys
好了,以上就是远程库的创建与认证。