- 运行Visual Studio
- 点击菜单中的Tools -> Extensions and Updates,在弹出窗口左侧列表项目中选择online -> Visual Studio Gallery,然后寻找或搜索出Git Source Control Provider,安装。
- 安装完毕后按照msdn网站的介绍,在solution explorer中右击project可看见Git选项,但我没有发现Git字样。解决方法如下:在vs的Tools -> Options -> Source Control,在窗口右侧Current source control plug-in项目下拉菜单中点击Git Source Control Provider. 此时会继续弹出一个窗口,让你输入你的用户名和电子邮件地址,还要你找出git.exe文件存放的目录(git所存放文件夹下的bin目录里)。输入完这些内容后,在右击project,git选项已出现在弹出菜单中了。
一:windows环境中搭建
1.安装TortoiseGit和MSysGit(MSysGit是Git版本控制系统在Windows下的版本——服务端),完成后就可以在本地使用git了。
打开TortoiseGit的setting:
2.打开puttygen,"generate"移动鼠标生成一个密钥,把上面公钥部分复制粘贴到文本文件里,点"Save Private Key"把私钥保存一个文件,如mygit.ppk.
服务器:准备copssh,MSysGit
1.准备好一个存放代码库的分区,如E盘,新建一个E:/code目录。在E盘安装copssh,如E:/ICW.
安装过程要新建一个ssh用户(也可用现有用户,但最好不要用administrator),这里我们建一个git用户,专门做代码提交,密码随便设即可,因为后面我们用密钥而不是用密码登录。
2.在copssh里激活git用户,去掉"Create keys for public key authentication"选项,后面每个用户要单独提交;
3.编辑etc/sshd_config,去掉"RSAAuthentication", "PubkeyAuthentication"前面的#注释,保存;
4.在ICW/home/git/.ssh里新建一个authorized_keys文件,把客户端step2的公钥复制过来(其他客户端就新增一行),重新启动"openssh SSHD"服务;
5.复制MSysGit的几个文件到ICW/bin: git.exe,iconlibv2.dll, git-receive-pack.exe, git-upload-pack.exe, git-upload-archive.exe
6.把E:/code文件夹加上git用户的写权限,新建一个myproj文件夹,用命令行进入myproj目录,用git建一个空的纯仓库
git --bare init
回到客户端电脑,右键TortoiseGit-Clone,输入ssh://git@server:/code/myproj,选中Load putty key之前保存的私钥文件,OK即可把服务器上的空代码库myproj克隆下来。再添加一个main.c,随便修改一些内容后保存,右键myproj, git Commit -> "master", OK之后再push到服务器即可。
其他还有一些技巧,如从现有的仓库复制纯代码库、远程增加等等,可以参考pro_git中文版。
这里比较复杂的就是服务器的3,4步,否则无法SSH登陆,我又用openssh试了下,能登录但是用TortoiseGit的路径总是不对。
二:Linux环境中搭建
git服务器搭建过程
需求
硬件需求:一台Ubuntu或者debian电脑(虚拟机),能通过网络访问到。
软件需求:git-core, gitosis, openssh-server, openssh-client, Apache2(Gitweb)
安装配置git服务器
a@server:~$sudo useradd -m git
a@server:~$sudo mkdir /home/repo
a@server:~$sudo chown git:git /home/repo
a@server:~$sudo chmod 700 /home/repo
安装配置gitosis
a@server:~$git config –global user.name “myname”
a@server:~$git config –global user.email “myname@server “
a@server:~$sudo apt-get install python-setuptools
a@server:~$cd /tmp
a@server:/tmp$git clone git://eagain.net/gitosis.git
a@server:/tmp$cd gitosis
a@server:/tmp/gitosis$sudo python setup.py install
a@server:/tmp/gitosis$su git
$ ln -s /home/repo /home/git/repositories
$ exit
usr@pc1:~$ssh-keygen -t rsa
将公钥拷贝到服务器的/tmp下:
usr@pc1:~$scp .ssh/id_rsa.pub git@<server>:/tmp
a@server:/tmp/gitosis$sudo chmod a+r /tmp/id_rsa.pub
a@server:/tmp/gitosis$sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Initialized empty Git repository in /home/repo/gitosis-admin.git/
Reinitialized existing Git repository in /home/repo/gitosis-admin.git/
a@server:/home/git$sudo passwd root
a@server:/home/git$su
root@server:/home/git# cd repositories
root@server:/home/git/repositories# cd gitosis-admin.git/
root@server:/home/git/repositories/gitosis-admin.gi t# sudo chmod 755 /home/repo/gitosis-admin.git/hooks/post-update
root@server:/home/git/repositories/gitosis-admin.git # exit
在服务器上新建一个测试项目仓库
我建了一个叫“teamwork”的仓库。
切换到git用户:
a@ubuntu:/home/git$ su - git
$ cd /home/prj_git
$ mkdir teamwork.git
$ cd teamwork.git
$ git init --bare
$ exit
管理gitosis的配置文件
刚刚提到,gitosis本身的配置也是通过git来实现的。在你自己的开发机里,把gitosis-admin.git这个仓库clone下来,就可以以管理员的身份修改配置了。
usr@pc1:~/work$ git clone git@<server>:gitosis-admin.git
fatal: The remote end hung up unexpectedly
root@server:/home/a/work/gitosis-admin # cp /path/to/.ssh/id_rsa.pub ./keydir/b.pub
root@server:/home/a/work/gitosis-admin # exit
team组有a,b两个成员,该组对teamwork仓库有读写权限;
team_ro组有lz一个成员,对teamwork仓库有只读权限。
加入新文件、提交并push到git服务器:
usr@pc1:~/work/gitosis-admin$ git add .
usr@pc1:~/work/gitosis-admin$ git commit -am “add teamweok prj and users”
usr@pc1:~/work/gitosis-admin$ git push origin master
初始化测试项目
usr@pc1:~/work$ cd teamwork-ori/
usr@pc1:~/work/teamwork-ori$ git init
usr@pc1:~/work/teamwork-ori$ git commit -am “initial version”
usr@pc1:~/work/teamwork-ori$ git push origin master
$ cd /home/b
$ git clone git@<server>:teamwork.git
$ vim hello
$ git add .
$ git commit -am “b add”
$ exit
添加已有git项目
首先需要从你的工作仓库中得到一个纯仓库, 比如你的工作目录为~/kernel, 你想导出纯仓库到你的优盘里,然后拷贝到gitserver上去。
$ git clone –bare ~/kernel /media/udisk
然后就拿着优盘,交给gitserver的管理员,让他拷贝到/home/repo/下,同时需要配置 gitosis相关配置文件哦,这个就不用再说了吧。比如:下载ALSA库:
git clone git://android.git.kernel.org/platform/external/alsa-lib.git
git clone git://android.git.kernel.org/platform/external/alsa-utils.git
git clone –bare alsa-lib alsa-lib.git
git clone –bare alsa-utils alsa-utils.git
配置gitweb
1. 安装gitweb
sudo apt-get install gitweb
2. 安装apache2
sudo apt-get install apache2
3. 配置gitweb
(1)默认没有 css 加载,把 gitweb 要用的静态文件连接到 DocumentRoot 下:
cd /var/ www/
sudo ln -s / usr/ share/ gitweb/* .
(注意后面的点)
(2)修改配置:
sudo vi /etc/ gitweb.conf
将 $projectroot 改为gitosis-admin.git所在目录: /home/git/repositories
(3)修改 /home/git/repositories权限,默认情况下,gitosis将 repositories权限设置为不可读的
sudo chmod 777 -R /home/git/repositories
11.编辑apache2配置文件,建立web站点 (默认情况下可以忽略此步骤)
(1) 编辑apache2配置文件
ubuntu中默认的web目录是/var/www,默认的cgi目录是 /usr/lib/cgi-bin/,安装完成gitweb后,gitweb的gitweb.cgi会自动放置
到该目录下。如果你的cgi路径不是默认的/usr/lib/cgi-bin/,需要将gitweb安装在/usr/lib/cgi-bin中的gitweb.cgi复制到原来配置
的cgi-bin路径,并修改apache的配置文件/etc/apache2/apache.conf:
SetEnv GITWEB_CONFIG /etc/gitweb.conf
gitweb.conf配置文件形如:(可自行修改,这里不做详细介绍)
<Directory "/srv/www/cgi-bin/gitweb">
Options FollowSymlinks ExecCGI
Allow from all
AllowOverride all
Order allow,deny
<Files gitweb.cgi>
SetHandler cgi-script
</Files>
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^.* /gitweb.cgi/$0 [L,PT]
</Directory>
(2)重新启动apache:sudo /etc/init.d/apache2 restart,访问http://localhost/cgi-bin/gitweb.cgi
<以下未经测试>
a2dissite gitserver 禁用
a2ensite gitserver 使能
/etc/init.d/apache2 restart 重启
git clone git://git.kernel.org/pub/scm/git/git.git
cd git
make GITWEB_PROJECTROOT=”/home/repo” prefix=/usr gitweb/gitweb.cgi
cd gitweb
cp -av git* /home/repo/
<VirtualHost 172.20.146.39:80>
ServerName 172.20.146.39
DocumentRoot /home/repo
ScriptAlias /cgi-bin/ /home/repo
<Directory /home/repo>
Options ExecCGI +FollowSymLinks +SymLinksIfOwnerMatch
AllowOverride All
order allow,deny
Allow from all
AddHandler cgi-script cgi
DirectoryIndex gitweb.cgi
</Directory>
</VirtualHost>
chmod a+r repo
chmod a+x repo
6./etc/init.d/apache2 restart
git clone http://192.168.1.1/alsa-lib.git
git clone http://192.168.1.1/alsa-utils.git
git访问方式:
git clone [email protected]:alsa-lib.git
Web网页浏览:
http://192.168.1.1
1.windows文件命名不区分大小 写,而linux支持。这样android源码下载时会出现一下问题。大约有15个文件存在这个问题。
2.库的描述文件在.git文件夹的description文件中。编辑该文件,在gitweb页中就会有 description。
3.gitosis库hooks下的post- update不是由post-update.sample重命名过来的,它们不一样。post-update可以更新工作目录,保持与库一致。没有它配置 文件是不会更新的。
4.(1)git@hello:/home/git$ git add .
error: readlink(“external/openssl/apps/md4.c”): No such file or directory
error: unable to index file external/openssl/apps/md4.c
fatal: adding files failed
Initialized empty Git repository in /external/openssl/.git/
root@/external/openssl # git add .
error: readlink(“apps/md4.c”): No such file or directory
error: unable to index file apps/md4.c
fatal: adding files failed
(3) [email protected]_r2$ rm -Rf .repo
[email protected]_r2 $ find . -name “.git” | xargs rm -Rf