如何在Visual Studio中配置git
21 在Git服务器上新建版本库
在使用VS2015进行团队开发前,我们先在Git服务器上创建新的版本库。
打开我们已经安装好的GitStack(如查直接看本篇的同学,可以先看一下服务端环境搭建一文URL:使用GitStack+TortoiseGit 图形界面搭建Git环境)
在GitStack中创建新的版本库,名为“MyGitForVsObject”,并新建两个用户"yubinfeng"和“zhangsan”,再新建一个组"MyGitGroup",将这两个用户加入到该组,并给版本库授权该组。具体操作这里不再赘述,不了解的朋友请看上面的URL
22 在VS2015中克隆远程版本库我们先在VS2015中新建一个解决方案,在工具栏,点“团队”=》“管理连接”
按上图所示,右打开的 团队资源管理器中,输入远程Git URL,点击克隆按钮,即可完成在VS2015中克隆远程版本库了
克隆成功后,可以在 本地Git存储库 中看到 本地版本库已经 从服务器上克隆下来了。
23 Git全局设置完成版本库克隆后,我们需要在Git中进行一次全局设置。
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击主页按钮
点击设置,选择全局设置,完成如下三项更改,点更新
用户名:将作为你以后版本提交后日志显示的名称
电子邮件:团队联系使用
默认存储库位置:最好进行一下改动,默认在C盘,防止丢失
24 Git存储库设置存储库设置和全局设置类同
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击主页按钮,选择 设置 - 存储库设置
其他内容不需要设置,主要 添加一下远程 。这将是以后获取新版本和推送到服务器的地址
此时,我们可以看到项目文件前面有一个小锁,并且代码中已经有了Git的信息,表示项目已经已经受到Git控制
25 第一次向Git服务器发布项目我们上面看到的所有Git的受控信息,只是相对于克隆到本地的版本库,此时Git服务器并没有接收到这些工程文件,下面我们要做的将是第一次将本地版本库中的工程文件同步到Git服务器,即项目发布
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击小房子,回到Git主页,点击同步
我们第一次将本地分支发布到远程服务器,点击发布
输入远程URL,发布,即可发布到远程库
我们可以打开GitStack查看日志
上面显示的时间,为你在本地操作的时间。我们可以看到Git作为分布式版本控制系统,你在离线进行操作,在推送时,显示的均为你操作时间,而非推送时间。
26 拉取、获取、合并、提交、推送、同步项目开发过程中,我们通常进行下面几种操作,我一次性介绍,这个和上篇TortoiseGit类似,直接看本篇的同学,可以参考上篇,URL:图形化Git客户端工具TortoiseGit
拉取(Pull):将远程版本库合并到本地版本库; 相当于(Fetch+Meger)
获取(Fetch):从远程版本库获得最新版本
合并(Meger):将两个版本库进行合并操作
提交(Commit):将所做的更改,存入本地暂存库
推送(Push):将所做的更改,存入远程版本库
同步(Pull+Push):先将远程库拉取,再将本地库推送到远程库 注意这个顺序; 相当于(Pull+Push)
我们对文件进行修改后,文件前有一个小对号,右击,点提交
我们在提交文件时,记得填写备注,在团队开发中,保持一个良好的习惯
提交在这里有三种:
提交:即将文件存入本地版本库
提交和推送:即将文件更改同时存入本地版本库和远程版本库
提交和同步:将文件更改提交到本地库的,再从远程版本库拉取新版本到本地,再推本地库到远程版本库
注意:
这里的操作,不针对当前文件,而是对所有变更进行提交、推送或同步。
27 创建分支对于创建分支在上篇(URL:图形化Git客户端工具TortoiseGit)中已经介绍过了,这里主要介绍一下如何基于Vs2015创建Git分支
工具栏 - 团队 - 管理连接,打开团队资源管理器
点击小房子,回到Git主页,点击分支
打开分支界面,在master分支上右击,选择 "从选定项创建本地分支"
在这里需要注意我们创建分支,有两种:
(1)创建本地分支
(2)创建远程会支
本地分支有创建前,一定要获取最新版本;远程分支,则要求所有成员最好能推送更改。
至于分支的创建是基于远程还是本地,最好能在团队成员之间达成一致。
下面介绍两种分支的创建方法
先看创建本地分支
输入一个分支名称,创建即可。
远程分支,我们需要选择如下
在创建远程分支时,一定要把跟踪远程分支,这个取消选择,否则将创建了一个跟踪分支,我们就不能发布了。
创建完成后,如下:
分支创建成功,接下就是发布到服务器
右击,点发布分支,即可。
可以看到,分支已经发布到服务器上了。
在服务器上通过GitStack也可以看到,多了一个分支。
28 切换和合并分支在VS2015中切换分支非常简单,只要在分支名称上双击,就可以了,项目资源管理器中的文件随之变化。
这里主要看一下合并,
我们先切换到新建的分支"2016-2-7",在分支名称右击,选择 合并自
选择master ,点击合并,即可完成将master合并到新分支了。
29 删除分支删除分支,首先要从远端删除,如下:
注意,如果要删除刚才新建的分支,和上篇TortoiseGit一样,要切换到另一分支操作。
远端删除后,服务器上的分支就被删除了,本地的分支,直接删除即可。
通过以下的步骤,你将在服务器上搭建并使用你自己的Git服务,例如myhostexamplecom。其中的一些步骤,像email通知,限制用户的权限,特定分组的接入管理,都是依据你的要求和现实状况的可选项。还有很多命令,你需要root权限才能执行,所以别忘了用sudo,或者(最好不要)直接切换到root来执行。
为有读写权限的用户建立一个分组。根据你的操作系统,你可以用groupadd命令来实现,用vigr来编辑分组文件,或者直接编辑/etc/group文件。在最后,你会在/etc/group文件中看到如下一行
repogroup::10005:marry,john,violet
其中,repogroup是准许接入这个仓库的组的名字。10005是一个独一无二的分组识别数字,marry,john,violet则是获准接入这个仓库的用户。
决定Git仓库的路径。它既可以放在你的home路径下(eg
/home/yourname/gitroot),也可以放在一个专用的路径下(eg
/var/gitroot)
配置权限,让Git用户可以访问这个目录
chmod
g+rx
/path-to/gitroot
chown
:grouprepo
/path-to/gitroot
建立新的Git仓库,叫做newrepo
cd
/path-to/gitroot
git
init
--bare
newrepogit
建立路径认证,以允许用户组访问,同时有针对性的设置Git
cd
newrepogit
chown
-R
:grouprepo
git
config
coresharedRepository
group
find
-type
d
-print0
|
xargs
-0
chmod
2770
find
-type
f
-print0
|
xargs
-0
chmod
g=u
设置提交(commit)的email通知(commit是一条命令),这样当有新的修改提交到仓库的时候,开发者们将会收到一封关于修改内容一览的电子邮件。
echo
'One-line
project
description'
>description
git
config
--local
hooksmailinglist
email-a@examplecom,email-b@examplecom,
git
config
--local
hooksemailprefix
'[DI-PR]
'
git
config
--local
hooksshowrev
"git
show
-C
%s;
echo"
git
config
--local
hooksemailmaxlines
100
通过设置一个称为钩子(hook)的东东,来创建这些email通知。
cd
hooks
cp
post-receivesample
post-receive
chmod
+x
post-receive
从post-receive的脚本中移除掉最后一行注释的#字号,最后语句应该是这样的
/path-to-hooks/post-receive-email
在你的库中先放入一个文件(比如README)。为了避免其他用户在第一次提交时遇到奇怪的错误信息时感到困惑,这是有必要的。
cd
to-your-personal-working-directory
git
clone
myhostexamplecom:/path-to/gitroot/newrepogit
echo
"Short
project
description"
>READMEtxt
git
add
READMEtxt
git
commit
-a
-m
"Add
README
file"
git
push
origin
master
#
第一次仅仅需要T"origin
master"
这个参数
为仓库的其他用户建立账户。依据你系统的不同,你可以通过useradd
或者adduser来实现。
设置用户可以通过公/私钥配对来访问。这包括以下几步:
1)已经有公钥的用户,只需要把公钥发给你就好。
2)没有公钥的用户,必须用ssh-keygen命令来生成一个,然后把ssh/id_rsapub发给你就可以了。
3)之后你必须在他们对应的账户下面建立这种公/私钥配对。复制他的公钥,然后顺序执行下面的命令。
sudo
su
-
username
mkdir
-p
ssh
cat
>>ssh/authorized_keys
<<\EOF
paste-key-as-one-line
EOF
exit
改变用户的账户让他们使用受限的shell。如果你想让你添加进来的用户仅仅使用Git,而不是Unix的所有东西,那么就设置他们的账户,让他们只能使用Git。Git提供了这种专为这种需求设计的受限shell。它通常被安装在
/usr/libexec/git-core/git-shell
or
/usr/local/libexec/git-core/git-shell。因此,对所有你想限制权限的用户,你可以执行以下命令。
sudo
chsh
-s
/usr/libexec/git-core/git-shell
username
告诉你的用户,用下面的语句来克隆仓库到本地。
git
clone
myhostexamplecom:/path-to/gitroot/newrepogit
到了这里,恭喜你,你成功了!
基本原理:使用copSSH在WINDOWS(XP)上建立SSH服务器;使用生成的“公钥-私钥”对作为身份标识;在服务器上配置SHELL脚本环境;配置客户端,加载私钥。详细过程如下:
安装前准备:
Download copSSH [SourceForge Link] (注:SSH服务器软件)
Download msysgit (注:WINDOWS下的git安装包)
Download TortiseGIT (注:WINDOWS下的git图形化软件,与TortiseSVN是同门)
Download PuTTY Installer (注:生成公钥-私钥对的软件,并可用于SSH客户端的登陆)
Step1 -安装copSSH
1将copSSH(basic edition 200)安装到路径 c:\SSH
2安装过程中写下SvcCOPSSH的密码,你可能永远不会用到,但写下也无伤大雅。
3启动copSSH,选择 开始->所有程序->copSSH->control panel;然后激活一个用户(假定为Administrator,选择Users->Add,下一步,选择一个用户,不要勾选Allow password authenticatin选项,点击forward,OK。
4其他关于public keys的事情无需操作,后面还会讲到。
Step2-配置copSSH
1选择路径-C:\SSH\etc ,在记事本中打开ssh_config 和sshd_config(注意:两个文件有一个字母“d”的区别)
2ssh_config -删除Port前的#号,设置端口号,这里采用默认端口22
3sshd_config -保证端口号一致
4确定系统防火墙中该端口未关闭。(这一点很重要)
5重启系统
Step3-安装Putty
1重启之后,继续回来,现在可以安装Putty Installer了。
2导航至你的安装路径,通常为c:\program files\Putty
3打开PuttyGenexe
4选择生成密钥的长度4096
5在空白面板处不停地晃动鼠标(用于生成随机种子),直到生成结束。(不要关闭PuttyGen)
6来到路径c:\SSH\Home\Administrator\ssh\ (这个路径在你使用copSSH激活用户时会产生,根据你激活的用户名,选择相应的路径),创建文件authorized_keys (注意没有后缀名)
7打开PuttyGen,复制Public Key(公钥)到文件authorized_keys ,并保存
8在PuttyGen中,将Private Key(私钥)保存为private_keyppk,保存在同一目录下。-比如,我的保存目录为c:\SSH\Home\Administrator\ssh\private_keyppk
9现在目录下应该有两个文件了,authorized_keys 和 private_keyppk
10为了测试连接,运行puttyexe
11在打开的界面中输入IP 地址(本机可以为localhost)和端口号
12打开左侧的菜单,选择Connection-SSH-Auth,选择你的私钥文件,c:\SSH\Home\<user>\ssh\private_keyppk
13点击Open,就会打开终端,让你输入Login Name,输入Administrator(注意大小写)
14你会看到显示接受你的公钥(Accept Public Key),客户端登陆成功,登陆信息也会缓存起来。
Step 4-安装 msysgit和TortiseGIT
1安装msysgit的过程中一路下一步即可,假定你的路径为C:\msysgit
2安装TortiseGIT,完成之后
1)在任意路径点右键,选择TortiseGIT-Settings,设置gitexe的路径为c:\msysgit\msysgit\bin,即为msysgit的安装路径
2)在左侧菜单中选择Network,选择SSH Client为putty中的plinkexe(如我的路径为C:\Program Files\PuTTY\plinkexe)
3将几个GIT运行中需要的文件复制到SSH服务器目录,当客户端远程登陆上来以后需要执行这些文件,文件源路径为c:\msysgit\msysgit\Git\libexec\git-core ,要复制的文件包括gitexe, git-receive-packexe, git-upload-archiveexe and git-upload-packexe,将以上文件复制到C:\SSH\Bin
Step5-配置用户环境
1对于copSSH来说,其默认的$HOME环境为c:\Documents and Settings\<user>,GIT也将会在该目录下寻找authorized_keys 文件。当然,这是咱要避免的事儿,我们要将GIT的路径重定向到C:\SSH\Home\<user>\ssh 。
2选择路径C:\SSH\Home\Administrator\,打开bashrc文件,在# User dependent bashrc file下面加上这样一段:export HOME=/c/SSH/home/Administrator Shell Options,(注意不要有其他空格出现),然后选择保存。
3把该文件复制到用户目录下,如: c:\Documents and Settings\Administrator\
Step7-使用GIT和Plink
1打开路径C:\SSH\home\Administrator,创建文件夹myappgit
2 在该文件夹上点右键,选择git create repository here,勾选make it bare,服务器文件仓库创建成功。
3导航至路径c:\Program Files\PuTTY ,打开pageantexe,选择add key,将你的私钥(private_keyppk)加载上。
4然后右键选择 git clone,url设为ssh://administrator@127001:22/SSH/Home/administrator/myappgit ,如果clone成功,恭喜你,大功告成!
关于git的操作详见git的使用说明,这里推荐Pro Git 简体中文版,翻译的很不错。
注:在执行git clone时可能会报错(该错误在所参考的E文中未提及,把俺害得不轻),如果是关于某个dll文件的错(具体是哪个文件记不清了,遇到的朋友可以根据文件名,在msysigt目录下搜索即可找到),可以将该文件同样复制到C:\SSH\Bin下,然后就可以正常运行了。
GitLab是GitHub的免费私有库替代方案,并且安装与配置都很方便。
GitLab要求最少4GB内存,支持小团队使用没问题,实测2GB内存的VPS基本没法用,开swapfile也不行,动不动就60秒超时。因此4GB内存是必须的。
关于这一点,内存大户主要是Unicorn,基于ruby的http服务器。Unicorn会在启动后预先占用大部分内存,内存会随着使用逐渐增长,并且不会释放。根据GitLab和Unicorn的官方文档,这不是它们的锅,那么这个锅可能是ruby和rails了。解决方法是unicorn-work-kill,会根据请求次数和内存占用自动重启Unicorn。Omnibus版的GitLab是默认开启的。
GitLab分为社区版和企业版,在未付费的情况下,两者的功能是一样的。并且社区版整合了CI/CD,因此可以满足绝大部分的开发需求。
安装包主要包括Omnibus整合包,Docker、AWS等的云镜像,以及一些第三方维护的版本。其中Omnibus直接整合了所有服务端组件,适合自用和练手。
安装以Omnibus整合包为例,操作系统为Ubuntu1604。
Gitlab需要 curl,openSSH 和 ca-certificates 这几个组件:
不过服务器系统一般自带,所以是可选的。
邮件服务,用于GitLab发送找回密码的邮件:
不过如果服务器没有域名的话,大部分邮箱会拒收邮件,而管理员帐号可以直接重置其他账号的密码,所以是可选的。
官方提供的脚本:
这个脚本会自动添加源到apt 的source list,以及安全key。另外,如果自己服务器在国内,脚本会自动添加清华的镜像,速度还行。
先更新apt缓存:
推荐使用 apt 而不是 apt-get ,前者大多数情况下更简单一点。
然后是安装:
其中 EXTERNAL_URL ,改成自己的域名。没有域名的话,可以直接设置成IP的形式: http://1234 ,这个推测跟nginx服务以及GitLab中的项目地址有关,所以最好正确设置。当然也可以之后在配置文件里更改。
安装完成后,可以在配置文件中修改配置 /etc/gitlab/gitlabrb 。
比如之前的 EXTERNAL_URL :
官方还有一个关于 unicorn 的优化建议:
默认值是2,如果服务器只用于GitLab的话,官方建议是CPU核心数加一,可以提高服务器的响应速度。不过如果内存只有4G,或者服务器同时承载其他服务,就不要改了,以免内存不足。另外,这个参数最小值是2,设为1,服务器可能会卡死。
配置完成后,刷新配置:
每次修改完 gitlabrb ,都要刷新配置。
如果没有报错的话,GitLab就配置完毕并且正常运行了。接下来可以打开浏览器开始访问了。
一台共用服务器上多人共同使用,多个git工程每个工程的地址和账号密码又是不一样。
使用global 此时在/home/usrname下gitconfig 会生成设置全局的git用户名及邮箱账号
如下命令可谓单个工程设置用户名及邮箱账号,存放在工程目录下git/config文件中
1首先为不同的工程配置不同的Git账号
注意:这里git config命令没有带—global,表示这是一个局部的设置,也就是这个用户是当前项目的,而不是全局的。
2为不同的用户生成SSH密钥
一般的Git服务器为了安全,都会需要我们提供一个安全的SSH密钥,默认情况下,生成密钥的文件名都是一样的,但是不同的用户,必须设置不同文件名的密钥文件,否则会发生覆盖。密钥生成后,添加到服务端(如Github)
密钥存放在用户目录下ssh路径下。
//B账户的私钥
添加完后,可以使用ssh-add来查看密钥列表
其中的remore地址是url = git@githubcom :samplegit,这时候,我们需要修改跟密钥对应的地址,上面在配置ssh时,为每个Hostname配置了一个host的别名,这时候,我们就不能使用原来的Hostname来提交了,要用别名来代替Hostname。
###############
几乎所有iOS程序员都上过GitHub寻找开源类库,的确,GitHub上有大量优秀的开源类库供大家学习。但是如何在Xcode中上传代码至GitHub呢?
首先我们新建一个工程,记得要勾选Create git repository on:
这说明使用Source Control,会默认在工程中创建git repository。然后工程新建完成后,会在右侧边栏看到这些信息,说明已经启用Source Control
如果没有使用Source Control,则是这样的:
现在我们已经在工程中启用了Source Control,这样就可以使用git来管理工程版本了
但是如果我们想对一个未启用git的工程加入git的功能怎么做呢?我们可以使用命令行来开启此功能,新建一个工程,不勾选Create git repository on,此时我们没有开启Source Control,然后我们手动创建git管理,如下图所示:
YiBantekiiMac-3:UseGit YiBan$ cd /Users/YiBan/Documents/iOS_Dev/ManualGitDemo
YiBantekiiMac-3:ManualGitDemo YiBan$ git init
Initialized empty Git repository in /Users/YiBan/Documents/iOS_Dev/ManualGitDemo/git/
使用
git init
来初始化一个空的git仓库,现在使用ls-la命令查看目录下的所有文件(包含隐藏文件)
total 16
drwxr-xr-x 7 YiBan staff 238 5 12 16:10
drwxr-xr-x 52 YiBan staff 1768 5 12 16:06
-rw-r--r--@ 1 YiBan staff 6148 5 12 16:10 DS_Store
drwxr-xr-x 9 YiBan staff 306 5 12 16:06 git
drwxr-xr-x 12 YiBan staff 408 5 12 16:06 ManualGitDemo
drwxr-xr-x 5 YiBan staff 170 5 12 16:06 ManualGitDemoxcodeproj
drwxr-xr-x 5 YiBan staff 170 5 12 16:06 ManualGitDemoTests
此时我们看到除了三个文件之外还有两个隐藏文件,DS_Store和git,DS_Store是由OS X生成的文件,包含了文件夹中的位置属性,git则是启用了Source Control自动生成的目录,然后使用git status查看当前状态:
YiBantekiiMac-3:ManualGitDemo YiBan$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>" to include in what will be committed)
DS_Store
ManualGitDemoxcodeproj/
ManualGitDemo/
ManualGitDemoTests/
nothing added to commit but untracked files present (use "git add" to track)
说明初始化成功了,显示出了未被追踪的文件。不过我们并不希望把DS_Store也加入的git中,因为那文件对我们没有任何用处,我们可以忽略它,具体做法是:新建一个文件,命名为gitignore,然后使用文本编辑器输入以下信息:
# Xcode�6�5
DS_Store�6�5
/build/
�6�5pbxuser
!defaultpbxuser
mode1v3
!defaultmode1v3
mode2v3
!defaultmode2v3
perspectivev3
!defaultperspectivev3
xcuserdata
profile
moved-aside
DerivedData
idea/
hmap
保存至工程文件夹中,这样我们目录中就多出一个gitignore文件了,这时我们再用git status命令查看当前状态:
YiBantekiiMac-3:ManualGitDemo YiBan$ git status
On branch master
Initial commit
Untracked files:
(use "git add <file>" to include in what will be committed)
gitignore
ManualGitDemoxcodeproj/
ManualGitDemo/
ManualGitDemoTests/
nothing added to commit but untracked files present (use "git add" to track)
这里看到已经没有DS_Store了,说明gitignore已经把DS_Store忽略了。现在可以提交了,使用
git add
此命令先将文件添加至暂存区域,但还没有提交,查看下状态:
YiBantekiiMac-3:ManualGitDemo YiBan$ git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>" to unstage)
new file: gitignore
new file: ManualGitDemoxcodeproj/projectpbxproj
new file: ManualGitDemoxcodeproj/projectxcworkspace/contentsxcworkspacedata
new file: ManualGitDemo/AppDelegateh
new file: ManualGitDemo/AppDelegatem
new file: ManualGitDemo/Baselproj/Mainstoryboard
new file: ManualGitDemo/Imagesxcassets/AppIconappiconset/Contentsjson
new file: ManualGitDemo/Imagesxcassets/LaunchImagelaunchimage/Contentsjson
new file: ManualGitDemo/ManualGitDemo-Infoplist
new file: ManualGitDemo/ManualGitDemo-Prefixpch
new file: ManualGitDemo/ViewControllerh
new file: ManualGitDemo/ViewControllerm
new file: ManualGitDemo/enlproj/InfoPliststrings
new file: ManualGitDemo/mainm
new file: ManualGitDemoTests/ManualGitDemoTests-Infoplist
new file: ManualGitDemoTests/ManualGitDemoTestsm
new file: ManualGitDemoTests/enlproj/InfoPliststrings
现在进行提交,使用git commit -m "Initail"命令,引号内的内容是提交的注释,随便写什么都可以:
YiBantekiiMac-3:ManualGitDemo YiBan$ git commit -m "Initial"
[master (root-commit) 83bbefc] Initial
17 files changed, 803 insertions(+)
create mode 100644 gitignore
create mode 100644 ManualGitDemoxcodeproj/projectpbxproj
create mode 100644 ManualGitDemoxcodeproj/projectxcworkspace/contentsxcworkspacedata
create mode 100644 ManualGitDemo/AppDelegateh
create mode 100644 ManualGitDemo/AppDelegatem
create mode 100644 ManualGitDemo/Baselproj/Mainstoryboard
create mode 100644 ManualGitDemo/Imagesxcassets/AppIconappiconset/Contentsjson
create mode 100644 ManualGitDemo/Imagesxcassets/LaunchImagelaunchimage/Contentsjson
create mode 100644 ManualGitDemo/ManualGitDemo-Infoplist
create mode 100644 ManualGitDemo/ManualGitDemo-Prefixpch
create mode 100644 ManualGitDemo/ViewControllerh
create mode 100644 ManualGitDemo/ViewControllerm
create mode 100644 ManualGitDemo/enlproj/InfoPliststrings
create mode 100644 ManualGitDemo/mainm
create mode 100644 ManualGitDemoTests/ManualGitDemoTests-Infoplist
create mode 100644 ManualGitDemoTests/ManualGitDemoTestsm
create mode 100644 ManualGitDemoTests/enlproj/InfoPliststrings
再查看下状态:
YiBantekiiMac-3:ManualGitDemo YiBan$ git status
On branch master
nothing to commit, working directory clean
好了,当前工作区是干净的,代码都已经提交完毕了。我们可以用Xcode提交代码,也可以用命令来提交,但是用命令行的话可以做的事情更多一些。使用Xcode可以查看提交的历史纪录,Source Control->History:
首先必须有GitHub的帐号,没有的话去注册一个,并且还要创建SSH,GitHub使用了公私密钥,确保与你的电脑通讯过程是安全的。
SSH创建过程是这样的:
1 在命令行输入cd ~/ssh,然后ls,看看此文件夹下有哪些文件,如果有id_rsapub或者id_dsapub(名字可能会不同),说明你已经有SSH keys了,你可以将它添加到你的账户中
2 如果没有的话,你讲得到"No such file or directory"这个错误信息,此时你可以通过命令生成出来:
ssh-keygen -t rsa -C "YOUR EMAIL"
在那里填写你的email地址,之后会被要求填写密码,此时的SSH keys就生成好了,有了SSH Keys后将其添加至你的GitHub账户中就可以了,在账户设置中找到SSH keys这一项,然后填写title和key,现在,你的SSH Key就和GitHub账户绑定了
前往个人主页,新建一个repository(网页右上方),会要输入一些信息:
输入Repository name和描述,然后选创建,会看到repository的链接:
把链接赋值下来,前往Xcode中,Source Control->第一项->Configure,之后选Remotes:
Add Remote中,输入Name(你工程的名字)和Address(之前的链接地址),然后Source Control->Push,选择刚刚新建的链接,Push~
现在刷新下GitHub主页,你的工程已经添加成功了~!
1、安装OpenSSH并配置SSH无密码登陆
通过命令 sudo apt-get install openssh-server,安装SSH服务。
通过命令 ps –e|grep ssh,查看ssh服务是否启动。
通过以上命令,我们为Ubantu系统安装SSH服务,并配置SSH无密码登陆,首先我们修改主机和ip配置文件:gedit /ect/hosts
2、创建用户git,用来管理运行git服务。
3、配置无密码SSH登陆
在gitClient_01上,我们使用命令:ssh-keygen –t rsa 生成密钥
完成之后,在ssh目录下,我们可以看到id_rsa和id_rsapub文件,id_rsapub为公钥,我们 通过命令scp /home/git/ssh/id_rsapub gitServer:/home/git将gitClient_01上生成的公钥拷贝到gitServer上。
在gitServer上我们首先查看/home/git/ssh目录下是否存在authorized_kesys文件,
如果没有,可以通过touch authorized_keys创建此文件。
Authorized_keys创建完成后,将gitClient_01上拷贝过来的公钥id_rsapub的内容追 加到authroized_keys中,注意是追加到此文件中,可以使用命令cat /home/git/id_rsapub>>/home/git/ssh/authorized_keys
以上内容完成后,我们在gitClient_01中,可以使用命令ssh gitServer即可完成无密码登陆。
4、安装Git
通过命令 sudo apt-get install git-core,安装git
5、建立git仓库的存储目录。
6、初始化服务器端仓库
使用命令 git –bare init /home/git/myRepgit,初始化化仓库
7、在gitClient_01上,通过git clone命令进行克隆远程仓库,并在各自的电脑上运行开发。
Git clone git@gitServer:/home/git/myRepgit
通过以上的步骤就完成了git服务器的搭建!
本文介绍如何在 mac 机器上创建 Git 服务器,总体思路是:使用gitosis来简化创建过程,在用作服务器的机器上创建一个名为 git 的账户来创建 git 服务器,其他客户端通过 ssh 机制访问 git 服务器。
一,创建 git 账户
1,在用作服务器的机器上创建 git 账户。我们可以通过 System Preferences->accounts 来添加。在这里我添加一个 git 的 administrator 账户,administrator 不是必须的,在这里仅仅为了方便。
2,设置远程访问
logout 当前账户,使用 git 账户登录;在 System Preferences->Sharing 中,勾选 Remote Login。
二,下载安装 gitosis
1,Mac OSX Yosemite 默认已经为我们安装了 Git 和 Python,可以使用如下命令查看其版本信息:
yourname:~ git$git--version
git version 232 (Apple Git-55)
yourname:~ git$python--version
Python 279
2,通过命令 git clone git@githubcom:tv42/gitosisgit 来下载 gitosis
yourname:~ git$ git clone git@githubcom:tv42/gitosisgit
Cloning into gitosis
remote: Counting objects: 614, done
remote: Compressing objects: 100% (183/183), done
remote: Total 614 (delta 434), reused 594 (delta 422)
Receiving objects: 100% (614/614), 9382 KiB | 45 KiB/s, done
Resolving deltas: 100% (434/434), done
3,进入 gitosis 目录,使用命令 sudo python setuppy install 来执行 python 脚本来安装 gitosis。
yourname:~ git$ cd gitosis/yourname:gitosis git$ sudo python setuppy install
running install
running bdist_egg
running egg_info
creating gitosisegg-info
……
Using /Library/Python/26/site-packages/setuptools-06c9-py26egg
Finished processing dependencies for gitosis==02
三,制作 ssh rsa 公钥
1,回到 client 机器上,制作 ssh 公钥。在这里我的使用同一台机器上的另一个账户作为 client。如果作为 client 的机器与作为 server 的机器不是同一台,也是类型的流程:制作公钥,放置到服务的 /tmp 目录下。只不过在同一台机器上,我们可以通过开启另一个 terminal,使用 su 切换到 local 账户就可以同时操作两个账户。
yourname:~ git$ su local_accountPassword:bash-32$ cd ~
bash-32$ ssh-keygen -t rsa
Generating public/private rsa key pair
Enter file in which to save the key (/Users/local_account/ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:Your identification has been saved in /Users/local_account/ssh/id_rsa
Your public key has been saved in /Users/local_account/ssh/id_rsapub
bash-32$ cd ssh
bash-32$ ls
id_rsa id_rsapub
bash-32$ cp id_rsapub /tmp/youramepub
在上面的命令里,首先通过 su 切换到 local 账户(只有在同一台机器上才有效),然后进入到 local 账户的 home 目录,使用 ssh-keygen -t rsa 生成 id_rsapub,最后将该文件拷贝放置到 /tmp/yournamepub,这样 git 账户就可以访问 yournamepub了,在这里改名是为了便于在 git 中辨识多个 client。
四,使用 ssh 公钥初始化 gitosis
1,不论你是以那种方式(邮件,usb等等)拷贝 yournamepub 至服务器的 /tmp/yournamepub。下面的流程都是一样,登入服务器机器的 git 账户,进入先前提到 gitosis 目录,进行如下操作初始化 gitosis,初始化完成后,会在 git 的 home 下创建 repositories 目录。
yourname:gitosis git$ sudo -H -u git gitosis-init < /tmp/yournamepub
Initialized empty Git repository in /Users/git/repositories/gitosis-admingit/
Reinitialized existing Git repository in /Users/git/repositories/gitosis-admingit/
在这里,会将该 client 当做认证受信任的账户,因此在 git 的 home 目录下会有记录,文件 authorized_keys 的内容与 yournamepub 差不多。
yourname:~ git$ cd ~yourname:~ git$ cd sshyourname:ssh git$ ls
authorized_keys
我们需要将 authorizd_keys 稍做修改,用文本编辑器打开它,删除里面的"command="gitosis-serve yourname",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty " 这一行:
yourname:ssh git$ open -e authorized_keys
然后,我们对 post-update 赋予可写权限,以便 client 端可以提交更改。
yourname:gitosis git$ sudo chmod 755 /Users/git/repositories//gitosis-admingit/hooks/post-update
Password:
yourname:ssh git$ cd ~
yourname:~ git$ cd repositories/
yourname:repositories git$ ls
gitosis-admingit
yourname:repositories git$
在上面的命令中可以看到,gitosis 也是作为仓库的形式给出,我们可以在其他账户下 checkout,然后对 gitosis 进行配置管理等等,而无需使用服务器的 git 账户进行。
最后一步,修改 git 账户的 PATH 路径。
yourname:gitosis git$ touch ~/bashrc
yourname:gitosis git$ echo PATH=/usr/local/bin:/usr/local/git/bin:\$PATH > bashrc
yourname:gitosis git$ echo export PATH >> bashrc
yourname:gitosis git$ cat bashrc
PATH=/usr/local/bin:/usr/local/git/bin:$PATHexport PATH
至此,服务器的配置完成。
五,client 配置
1,回到 local 账户,首先在 terminal 输入如下命令修改 local 的 git 配置:
bash-32$ git config --global username "yourgitname"bash-32$ git config --global useremail "yourmail@yourcomcom"
2,测试服务器是否连接正确,将 1014211 换成你服务的名称或服务器地址即可。
yourname:~ local_account$ ssh git@1014211Last login: Mon Nov 7 13:11:38 2011 from 1014211
3,在本地 clone 服务器仓库,下面以 gitosis-admingit 为例:
bash-32$ git clone git@1014211:repositories/gitosis-admingit
Cloning into gitosis-adminremote: Counting objects: 5, doneremote: Compressing objects: 100% (5/5), doneremote: Total 5 (delta 0), reused 5 (delta 0)
Receiving objects: 100% (5/5), done
bash-32$ ls
Desktop InstallApp Music Sites
Documents Library Pictures gitosis-admin
Downloads Movies Public
bash-32$ git
在上面的输出中可以看到,我们已经成功 clone 服务器的 gitosis-admin 仓库至本地了。
4,在本地管理 gitosis-admin:
进入 gitosis-admin 目录,我们来查看一下其目录结构:gitosisconf 文件是一个配置文件,里面定义哪些用户可以访问哪些仓库,我们可以修改这个配置;`keydir` 是存放ssh 公钥的地方。
bash-32$ cd gitosis-admin/
bash-32$ ls
gitosisconf keydir
bash-32$ cd keydir/
bash-32$ ls
yournamepub
我们只需要将其他 client 产生的 ssh 公钥添加到 keydir 目录下,并在 gitosisconf 文件中配置这些用户可以访问的仓库(用户名与放置在 keydir 下sh 公钥名相同,这就是在前面我们要修改ssh 公钥名的原因),然后将改动提交至服务器,这样就可以让其他的 client 端访问服务器的代码仓库了。
5,仓库权限管理
gitosisconf文件是用来设置用户、仓库和权限的控制文件。keydir 目录则是保存所有具有访问权限用户公钥的地方— 每人一个。在 keydir 里的文件名(比如上面的 yournamepub)应该跟你的不一样 — Gitosis 会自动从使用 gitosis-init 脚本导入的公钥尾部的描述中获取该名字。
看一下 gitosisconf 文件的内容,它应该只包含与刚刚克隆的 gitosis-admin 相关的信息:
$ cat gitosisconf
[gitosis]
[group gitosis-admin]
members = scott
writable = gitosis-admin
它显示用户 yourname — 初始化 Gitosis 公钥的拥有者 — 是唯一能管理 gitosis-admin 项目的人。
现在我们来添加一个新项目。为此我们要建立一个名为 mobile 的新段落,在其中罗列手机开发团队的开发者,以及他们拥有写权限的项目。由于 yourname 是系统中的唯一用户,我们把他设为唯一用户,并允许他读写名为 iphone_project 的新项目:
[group mobile]
members = scott
writable = iphone_project
修改完之后,提交 gitosis-admin 里的改动,并推送到服务器使其生效:
$ git commit -am 'add iphone_project and mobile group'[master 8962da8] add iphone_project and mobile group
1 file changed, 4 insertions(+)
$ git push origin master
Counting objects: 5, done
Compressing objects: 100% (3/3), done
Writing objects: 100% (3/3), 272 bytes | 0 bytes/s, done
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:gitosis-admingit
fb27aec8962da8 master -> master
6,添加新项目到仓库种
在新工程 iphone_project 里首次推送数据到服务器前,得先设定该服务器地址为远程仓库。但你不用事先到服务器上手工创建该项目的裸仓库— Gitosis 会在第一次遇到推送时自动创建:
$ git remote add origin git@gitserver:iphone_projectgit
$ git push origin master
Initialized empty Git repository in /opt/git/iphone_projectgit/
Counting objects: 3, done
Writing objects: 100% (3/3), 230 bytes | 0 bytes/s, done
Total 3 (delta 0), reused 0 (delta 0)
To git@gitserver:iphone_projectgit
[new branch] master -> master
请注意,这里不用指明完整路径(实际上,如果加上反而没用),只需要一个冒号加项目名字即可 — Gitosis 会自动帮你映射到实际位置。
要和朋友们在一个项目上协同工作,就得重新添加他们的公钥。不过这次不用在服务器上一个一个手工添加到 ~/ssh/authorized_keys 文件末端,而只需管理 keydir 目录中的公钥文件。文件的命名将决定在 gitosisconf 中对用户的标识。现在我们为 John,Josie 和 Jessica 添加公钥:
$ cp /tmp/id_rsajohnpub keydir/johnpub
$ cp /tmp/id_rsajosiepub keydir/josiepub
$ cp /tmp/id_rsajessicapub keydir/jessicapub
然后把他们都加进 mobile 团队,让他们对 iphone_project 具有读写权限:
[group mobile]
members = scott john josie jessica
writable = iphone_project
如果你提交并推送这个修改,四个用户将同时具有该项目的读写权限。
Gitosis 也具有简单的访问控制功能。如果想让 John 只有读权限,可以这样做:
[group mobile]
members = scott josie jessica
writable = iphone_project
[group mobile_ro]
members = johnreadonly = iphone_project
现在 John 可以克隆和获取更新,但 Gitosis 不会允许他向项目推送任何内容。像这样的组可以随意创建,多少不限,每个都可以包含若干不同的用户和项目。甚至还可以指定某个组为成员之一(在组名前加上 @ 前缀),自动继承该组的成员:
[group mobile_committers]
members = scott josie jessica
[group mobile]
members = @mobile_committers
writable = iphone_project
[group mobile_2]
members = @mobile_committers john
writable = another_iphone_project
如果遇到意外问题,试试看把 loglevel=DEBUG 加到 [gitosis] 的段落(译注:把日志设置为调试级别,记录更详细的运行信息。)。如果一不小心搞错了配置,失去了推送权限,也可以手工修改服务器上的 /home/git/gitosisconf 文件 — Gitosis 实际是从该文件读取信息的。它在得到推送数据时,会把新的 gitosisconf 存到该路径上。所以如果你手工编辑该文件的话,它会一直保持到下次向 gitosis-admin 推送新版本的配置内容为
0条评论