title: git的团队协作开发 date: 2018-04-24 14:00:03 tags: [git] ---
在控制面板中点击组织按钮,添加组织,在这里可以把组织理解为一个公司 添加成功后,进入刚刚新建的组织 邀请他人加入----相当于公司成员 组织团队可以进行分组,默认的Owners是管理组
创建新的仓库。 打勾 该仓库为私有的。 创建仓库。
创建成功后,项目负责人下载git后,在需要上传的文件夹中右键选中 Git Bash Here 依次运行:
git init #初始化 git add . #添加到本地仓库 . 表示全部当前文件夹中的所有文件和目录 git commit -m "first commit" #添加后生效的必须提交 -m 后面的是提交的备注 git remote add origin http://10.92.216.250:3000/test/test.git #连接我们新建的远程仓库 git push -u origin master #将本地仓库的所有推送到远程仓库,需要输入帐号密码创建新的团队
根据需要设置权限 进入刚刚新建的团队,添加成员和相应的仓库
小张:
git clone http://10.92.216.250:3000/test/test.git #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了小张在这个项目--test文件夹中新增了一个index.html文件 在该项目中右键选中 Git Bash Here
git add index.html #将index.html添加到本地仓库中 git status #这个是查看有多少添加但还没提交的文件 git commit -m '小张完成了index.html' #提交到本地仓库上面的过程的无限进行,添加,提交。注意这些操作都是在本地仓库进行的
快下班了,小张准备把今天的开发全部推送到服务器
$ git remote #提交之前最好先看看服务器叫什么 origin #这个origin就是使用git remote得到的远程服务器的名称 $ git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master在使用git add . 命令时,出现如下提示: warning: LF will be replaced by CRLF in XXXXX 意思是在XXXXX文件中,LF(换行,Line Feed)将会被CRLF(回车换行,CarriageReturn)替代。这是因为在windows中换行符为CRLF,而在linux下的换行符为LF。
rm -rf .git # 删除.git git config --global core.autocrlf false #禁用自动转换 git init git add .在开发中,有时候git根目录下有一些不需要add的文件或目录,可以在根目录添加一个 ".gitignore"文件
/mtk/ #过滤整个文件夹 *.zip #过滤所有.zip文件 /mtk/do.c #过滤某个具体文件 echo "*.class" >> .gitignore #用命令行排除以.class结尾的文件第二天老郭也来开发这个项目:
git clone http://10.92.216.250:3000/test/test.git #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了取得最新的项目,老郭看到小张已经把index.html开发了。他就负责开发admin.html,这个时候小张也在开发index.css 老郭开发完admin.html后
git add admin.html #将index.html添加到老郭的本地仓库中$ git status #这个是查看有多少添加但还没提交的文件 git commit -m '老郭完成了admin.html' #提交到本地仓库 git remote #提交之前最好先看看服务器叫什么 git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master这个时候小张的index.css也开发完成了:
$ git add index.css $ git status # $ git commit -m '小张完成了index.css' #提交到本地仓库 $ git remote #提交之前最好先看看服务器叫什么 $ git push origin master #将本地master推送到origin这台主机上,默认名字相同的分支,即master error:************** #报错了这是因为老郭已经提前提交了一次,现在小张多应的版本不是最新的,每次提交都要确保对应的最新版本
小张知道原因后:
$ git pull #将远程服务器中的最新版本拉下来,没有文件冲突肯定就成功的,有冲突后面再说 $ git push origin master #现在小张就提交成功了以后小张也学聪明了,不过有几个开发人员,反正每次push之前先pull最新的下来,然后再push 在小张push成功后,如果老郭又要push也需要先pull最新的下来,另外每次开发之前最好也pull一次,这样 就可以在最新版本中开发,也就是开发前开发后都要pull
现在中梁也来开发这个项目了
git clone http://10.92.216.250:3000/test/test.git #直接将项目克隆到本地,可在D盘中运行该命令,成功后会出现一个test文件夹,然后就可以进行常规操作了中梁开发了test.txt,
文件内容 2222122 222 222这个时候小张也在开发这个test.txt,
文件内容 aaa aaa aaa如果中梁开发得快,先push了,这个时候小张再push就会报冲突的错误,就算pull也拉不下来。
E:\work\test>git push To http://10.92.216.250:3000/test/test.git ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'http://10.92.216.250:3000/test/test.git' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull ...') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details. E:\work\test>git pull remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From http://10.92.216.250:3000/test/test 1ada640..dbb924c master -> origin/master error: Your local changes to the following files would be overwritten by merge: test.txt Please commit your changes or stash them before you merge. Aborting Updating 1ada640..dbb924c在整个协作开发时,有时候会出现冲突。通常都是由于开发人员分工不明确导致的,所以如果出现这种情况,需要两个程序员协商解决。 另外小张可以先
$ git stash #本地的所有修改就都被暂时存储起来 。是用git stash list可以看到保存的信息 Saved working directory and index state WIP on master: 1ada640 '222' $ git stash list stash@{0}: WIP on master: 1ada640 '222' #其中stash@{0}就是刚才修改保存的标记 $ git pull #现在就能pull下来了 $ git stash pop stash@{0} #还原暂存的内容 Auto-merging test.txt CONFLICT (content): Merge conflict in test.txt #系统自动合并修改的内容,但是其中有冲突,需要手动解决。打开冲突的文件test.txt
文件内容 <<<<<<< Updated upstream 2222122 222 222 ======= aaa aaa aaa >>>>>>> Stashed changes系统不知道要保留中梁的,还是报错小张的 这个时候经过协商,把文件改为
文件内容 222 aaa 222然后小张:
$ git add test.txt $ git commit -m '合并了test文件内容' $ git push origin master现在不管是老,中,少三人还是更多的开发者,都可以按照这个流程完成所有开发
在之前的开发中,适用于小团队,如果大团队就需要多分支来管理。
这波操作后gogs 上仓库就有新的test分支了 项目管理员可以在仓库设置中->管理分支->保护分支->把给主分支开启保护
其他人可以在其他分支中创建合并请求
该仓库管理团队的成员可以点击合并进行合并,有冲突也可以在gogs 上点击 编辑(小笔)解决冲突后合并。
转载于:https://www.cnblogs.com/CGCong/p/9375774.html
相关资源:数据结构—成绩单生成器