首先安装:
sudo apt-get install git-core
sudo apt-get install openssh-server
sudo apt-get install gitosis
更改python默认版本
sudo rm /usr/bin/python
sudo ln -s python2.6 /usr/bin/python
然后:
增加名为Git的用户,命令行禁用密码
sudo adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /home/git git
因为git需要ssh验证 ,所以在本地机器上生成ssh key
默认会在 ~/.ssh 下生成两个文件
私钥(本地保存) id_rsa
公钥(上传服务器) id_rsa.pub
ssh-keygen -t rsa
ls ~/.ssh/
id_rsa id_rsa.pub known_hosts
上传公钥到USER用户的根目录下
scp .ssh/id_rsa.pub USER@YOUR_SERVER:
sudo -H -u git gitosis-init < /home/USER/id_rsa.pub
sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update
如果有密钥,或迁移密钥到本地,会需要下面的步骤,( 默认可忽略此步骤 )
#启动ssh-agent,
ssh-agent
#添加id_rsa到ssh-agent
ssh-add id_rsa
到这一步,基本上都安装好了,可以直接到本地进行测试
git clone git@YOUR_SERVER:gitosis-admin.git
--------------------------
首先我们在服务器上初始化一个git 项目:
[root@li96-10 repository]# mkdir blog.git
[root@li96-10 repository]# cd blog.git/
[root@li96-10 blog.git]# git init --bare #一定要加上--bare,且该目录不能有任何文件和目录,否则报错:fatal: Out of memory? mmap failed: No such device
Initialized empty Git repository in /usr/local/system/repository/blog.git/
接下来我们在创建一个git 项目:
[root@li96-10 blog.git]# cd ..
[root@li96-10 repository]# mkdir test.git
[root@li96-10 repository]# cd test.git/
[root@li96-10 test.git]# echo "some content" >> file
[root@li96-10 test.git]# git add file
fatal: Not a git repository (or any of the parent directories): .git
[root@li96-10 test.git]# git init
Initialized empty Git repository in /usr/local/system/repository/test.git/.git/
[root@li96-10 test.git]# git add file
[root@li96-10 test.git]# git commit -am "first commit"
[master (root-commit) 3ea3176] first commit
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file
将test.git push到blog.git项目上
[root@li96-10 test.git]# git remote add origin ../blog.git
[root@li96-10 test.git]# git push origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 213 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To ../blog.git
* [new branch] master -> master
现在我们从blog.git中clone出来:
[root@li96-10 blog.git]# cd ..
[root@li96-10 repository]# git clone blog.git #因为我们的reposi是blog.git,clone下来后就会是blog了
Initialized empty Git repository in /usr/local/system/repository/blog/.git/
[root@li96-10 repository]# cd blog
[root@li96-10 blog]# ll
total 4
-rw-r--r-- 1 root root 13 Jan 4 22:09 file
可以看到项目中果然有个file文件,是刚才我们push进去的
那么下面我们在新clone的branch blog里面增加一个文件看看,
[root@li96-10 blog]# echo 'Second file contents' > file2
[root@li96-10 blog]# git add file2
[root@li96-10 blog]# git commit -am'added second file'
[master 63be855] added second file
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file2
[root@li96-10 blog]# git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
nothing to commit (working directory clean)
然后我们push到blog.git
[root@li96-10 blog]# git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 280 bytes, done.
Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
To /usr/local/system/repository/blog.git
3ea3176..63be855 master -> master
这样的话,我们的blog.git已经有两个文件了file,file2
下面我们进到test.git里面,并且将刚才在first的修改合并过来:
[root@li96-10 blog]# cd ../test.git/
[root@li96-10 test.git]# git fetch origin
remote: Counting objects: 4, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
From ../blog
3ea3176..63be855 master -> origin/master
[root@li96-10 test.git]# git merge origin/master
Updating 3ea3176..63be855
Fast forward
file2 | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
create mode 100644 file2
我们可以看到,已经将在first的修改合并过来了,在上面的操作中我们用了fetch和merge,其实我们可以将两个命令简化为一个pull命令:
[root@li96-10 test.git]# git pull origin master
From ../blog
* branch master -> FETCH_HEAD
Already up-to-date.
总结一下,将版本库拿下来的命令是pull,而将本地修改与版本库合并的命令是push.并且push之前先要pull哦!
当然了,这些操作都是在一台机器上操作的,下面演示一下使用ssh协议连线到真正的remote 机器:
从remote上clone下来:
[root@master repository]# git clone ssh://gituser@xxx.xxx.xxx.xxx/path/to/repository/blog.git
Initialized empty Git repository in /root/repository/blog/.git/
remote: Counting objects: 1055, done.
remote: Compressing objects: 100% (822/822), done.
remote: Total 1055 (delta 115), reused 1055 (delta 115)
Receiving objects: 100% (1055/1055), 1.29 MiB | 19 KiB/s, done.
Resolving deltas: 100% (115/115), done.
[root@master repository]# ll
总计 4
drwxr-xr-x 17 root root 4096 01-05 20:57 blog
然后,当我们在本地做了修改,想要提交到remote的时候,我们就可以直接push了:
[root@master repository]# cd blog/
[root@master blog]# git push
Everything up-to-date
这样就基本OK了!
提交之后,在另外一个客户端通过git pull 就可以更新到代码了。
附上参考资料:
http://www.stylejar.com/archives/ubuntu_install_git_server.html
http://xf986321.iteye.com/blog/702974
http://www.linuxsir.org/bbs/thread281294.html
git原理
http://www.iteye.com/topic/732199
分享到:
相关推荐
Android代码管理是通过一种叫Git的分布式代码管理工具来管理的。
gerrit代码审核服务器:作为Git代码管理服务器,gerrit为git代码的提交引入了强制审核机制(除非特别的授权设置),所以也可以称gerrit服务器为代码审核服务器,其提供团队开发时的严格的代码审核入库机制,便于版本...
该研讨会旨在展示如何将Git用作源代码管理管理工具的基础知识。 这是更新的示例。 您应该提交给内存的4条基本命令(看看我在内存中做了什么?) git pull git add -A git commit -m "some commit message" git ...
Git源码管理的一个工具。无需下载安装配置Git环境。傻瓜式安装,直接使用!
GitLab 5.0以前版本要求服务器端采用 Gitolite 搭建,5.0版本以后不再使用 Gitolite ,采用自己开发的 gitlab-shell 来实现。如果你觉得安装麻烦可以使用 GitLab Installers 一键安装程序。系统要求:Ubuntu/...
GitLabCommunityEdition是一个自托管的Git存储库提供程序,具有帮助项目管理和软件开发的附加功能。GitLab提供的最有价值的功能之一是内置的持续集成和交付工具GitLabCI。在本教程中,我们将演示如何设置GitLabCI以...
Dynaguppy](dynaguppy) 是一个自组装 Puppet 框架,它使用来管理 Puppet 环境,方法是将它们映射到它也管理的代码存储库中的分支。 有关于如何设置 Dynaguppy 的更多详细。 [dynaguppy]: : [git]: ://git-scm....
吉特·古德 用Elixir编写的Git源代码管理工具。 Git HTTP和SSH支持。 用户身份验证和权限。 完全集成的GraphQL API。 Git命令的本机(NIF)实现。 可自定义的Git存储后端。 问题追踪器。 代码审查。 持续集成。 请...
该存储库包含用于利用基于Debian的实时构建,Docker,Ansible,OpenZFS等开源工具构建基于Ubuntu的Delphix Appliance的代码。 它能够生成包含Delphix动态数据平台的虚拟机映像,并能够在云和非云虚拟机管理程序...
3.1. 安装包管理器 6 3.2. 高亮类 7 3.2.1. Bracket Highlighter 7 3.2.2. CNPunctuationAutopair 7 3.3. Markdown 7 3.3.1. MarkdownEditing 7 3.3.2. Markdown Extended 7 3.3.2.1. 需要Monokai Extended主题进行...
本文档将引导您完成构建和管理Ubuntu Core设备的步骤。 您可以在上找到它。 建筑 要开始构建本文档,首先git将此存储库克隆到本地计算机上的工作目录中。 接下来,要构建文档,您需要安装documentation-builder: ...
使用绿色按钮将文件下载为zip格式,或使用Git将存储库克隆到您的计算机上。 发行版 版本v1.0对应于已出版书籍中的代码,没有更正或更新。 会费 请参阅文件Contributing.md,以获取有关如何为该存储库做出贡献的更多...
从好的方面来说,您可以完全访问源代码,因此可以添加您始终希望GitHub拥有的功能! (如果需要,请发送拉取请求!)您也可以免费将其安装在防火墙后面。 依存关系 Gitty依赖git,openssh和MySQL。 在Fedora上: ...
=运行方式下载init_your_ubuntu,并把它复制到你的虚拟机中source init_your_ubuntu.sh这份脚本会做的事情:更换apt软件源为阿里云源安装python3-pip并更换pip3为清华源安装git (代码仓库管理工具)安装ropper (pwn...
NetServa SH 这个SH ell项目是一组Ubuntu / systemd Bash别名和env变量,以帮助简化从上游(Github)存储库管理Bash Shell的过程。 该项目还包括相关的Shell脚本集合,用于设置和管理简单的Ubuntu Web,Mail和DNS...
SCM Manager 是一款同时支持Git、Subversion、Mercurial的源代码管理服务器,基于Java构建。 中文版由木鱼制作,除了进行全面的中文化以外,还提供了配置脚本、预置了插件并进行了插件的中文化,以及安装说明。 SCM...
(LLNL)的(SAMRAI)促进了代码的并行化以及所有单元的构造,管理和存储。 该代码由各种显式的高阶有限差分冲击捕捉WCNS(加权紧凑非线性方案)组成,用于捕捉冲击波,材料界面和湍流特征。 实施的AMR算法基于...
在开始使用该项目之前,请阅读所有文档。概述首先,许多PHP网站和应用程序不需要太多的服务器配置或开销。 该虚拟机应该具有进行基本开发的所有需求,因此您不必担心配置虚拟环境,并且只需关注代码即可。 虚拟机...
为了在我们的CS课程中使用Git帮助管理项目和考试的分发,我们开发了一些Python脚本来协助设置学生帐户,课程组,管理成员权限和提交代码。 有关概述,请参见CCSC:Eastern 2019文章。 这些便利脚本是Python 3的...