在U盘里建立git仓库(转)
因为需要频繁的在各电脑上切换,例如在实验室电脑和自己的电脑上工作,工作代码又需要在同版本控制之下。要满足这样的需求,可以使用网上免费的Git托管服务器,例如GitHub,但是免费的托管项目,又需要开源。如果有一个可以可以移动的Git服务器,问题就解决了,本文就是一个把Git服务器版本库放到U盘里面的解决方案,当然你要保证你的U盘别丢了。
以windows为例:
1、windows下安装git的管理工具, 安装时选用 git bash和git here 。安装好后鼠标右键桌面或者项目文件下 选择“ Git Bash Here "进行操作。
2、假设欲在 u盘目录 H:/code_repo/dcshop目录建立仓库作为服务端,依次执行以下命令:
cd H:/code_repodcshop #切换当前目录到h磁盘
git --bare init --shared #创建以个空的仓库 ,并且可以多用户共享
最后一行git init
的作用是创建一个空的git仓库或重新初始化一个已存在的仓库。bare参数的作用是让 syncfiles目录等价于一个赤裸的仓库(bare repository),shared参数则指定仓库在多个用户间共享。由此相当于创建了一个作为服务端的仓库。这个仓库的目录结构可以和后面创建的仓库 对比下,是不一样的。
3、假设欲同步的文件位于d:syncfiles目录下,现在需要把d:syncfiles目录下的文件推送到服务端仓库中,依次执行以下命令:
cd /d/syncfiles git init #在此目录创建一个git仓库 git config core.autocrlf false #可选,关闭自动将lf换行符转换为crlf换行符 git add . #将目录下的全部文件添加到索引中 git commit -m "提交信息" #将变化提交到仓库 "提交信息" git remote add "origin" H:/code_repo/dcshop //添加一个远程仓库,origin为别名(git默认就是origin) git push origin master #将本地内容推送到服务端仓库中
如果 git commit 提交有问题,提示Plase tell me who you are ? 是你没有定义你的名字和邮箱。
#输入下面两句,并且替换成你的名字和邮箱 git config --global user.email "your@email.com" git config --global user.name "Your Name"
以上步骤完成后,本地d:syncfiles目录下的文件即被推送到服务端仓库中了。以后文件有改动时,可按以下步骤提交变化:
git add 改动的文件 git commit -m "提交信息" #以上步骤可以反复进行,等工作告一段落时可再提交到服务端仓库中 git push
4、现在假设要在e:进行同步,则步骤如下:
cd /e git clone H:/code_repo/dcshop #从服务端克隆出一个仓库 git config core.autocrlf false
执行后,可在e:下看到syncfiles目录,这个目录的结构和d:syncfiles完全一致(同时可以比对下h:syncfiles的目录结构,是不一样的)。以后如果对这个目录进行更改,可按第3步将更改推送到服务端仓库中。
5、从服务端仓库中同步更改。假设在d:syncfiles进行了更新并推送到了服务端仓库,此时需要在e:syncfiles中进行同步。这个步骤包含了两个动作:
- 从服务端仓库取出更新版本
- 与本地仓库进行合并
步骤如下:
cd /e/syncfiles
git pull origin master
以上展示了git中常见的操作,但没有涉及到以下内容:
- branch(分支)
- 冲突和合并
- 撤销和恢复
要说明的是,在git中有一个默认的分支存在,即master分支(主分支,即上文命令中出现的master),该分支由git自动生成。之前我们的各个操作都是在主分支上进行的,只是我们未察觉它的存在而已。
附上我的.git/config
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
hideDotFiles = dotGitOnly
[remote "origin"]
fetch = +refs/heads/*:refs/remotes/origin/*
url = I:\\code_repo\\dcshop
puttykeyfile =
[branch "master"]
remote = origin
merge = refs/heads/master