持续集成(Continuous Integration ,CI)
在传统软件开发过程中,集成通常发生在每个人都完成了各自的工作之后。在项目尾声阶段,通常集成还要痛苦的花费数周或者数月的时间来完成。持续集成是一个将集成提前至开发周期的早期阶段的实践方式,让构建、测试和集成代码更经常反复地发生。

持续集成意味着一个在家用笔记本编写代码的开发人员(嘿,史蒂夫)和另一个在办公室编程的开发人员(嘿,安妮)可以为同样的产品分别地编写软件,将其改动整合在一个叫做源存储库的地方。他们可以从各自编写的部分构建出组合的软件,并且按照他们期望的方式来测试软件。

开发人员通常使用一种叫做IC Server 的工具来做构建和集成。持续集成要求史蒂夫和安妮能够自测代码。分别测试各自代码来保证它能够正常工作,这些测试通常被称为单元测试(Unit tests)。

代码集成以后,当所有的单元测试通过,史蒂夫和安妮就得到了一个绿色构建(green build)。这表明他们已经成功地集成在一起,代码正按照测试预期地在工作。然而,尽管集成代码能够成功地一起工作了,它仍未为生产做好准备,因为它没有在类似生产的环境中测试和工作。在下面持续交付部分你可以了解到持续集成后面发生了什么。

考虑到实践持续集成,史蒂夫和安妮必须频繁地登记主代码仓库、集成和测试他们的代码。通常一小时很多次,并且每天最少一次。

持续集成的好处是,集成不再是个头疼事。软件在一直被编写和集成。在持续集成之前,集成发生在创建过程的结尾阶段,一次性完成,并且不知道要耗时多久。而现在持续集成,每天都融入到了工作方式当中。

持续交付(Continuous Delivery,CD)
让我们说回到我们的两位开发人员,史蒂夫和安妮。持续交付意味着每次史蒂夫或安妮修改、整合和构建代码时,也同时在类似于生产环境中自动测试了这段代码。我们通常将这个在不同环境发布和测试的过程叫做部署流水线。通常部署流水线有一个开发环境,一个测试环境,一个准生产环境,但是这些阶段会根据不同的团队、产品和组织而变化。例如,Mingle团队有一个阶段叫做“纸杯蛋糕”的准生产环境,而Etsy的准生产环境叫做“公主”。

在不同的环境下,安妮和史蒂夫写的代码被分别进行测试。当代码部署到生产环境它就开始了工作,这给予了他们更多的信心。并且只有当代码通过前一个环境的测试才会进入到下一个部署流水线的环境当中去。通过这种方式,安妮和史蒂夫将会从每个环境中测试并得到新的反馈,如果有失败,他们也可以在代码被应用到生产环境之前更加容易地发现问题并且修正它。

From: http://blog.dataman-inc.com/98-shurenyun-cdci/
问题:在
$git status
# On branch master

$git checkout master
README.txt: needs merge
error: you need to resolve your current index first

git reset --merge

git pull #好了,但是出现:
# Changed but not updated:  ( Changes bu not updated → 文件被修改,但并没有添加到暂存区。如果 commit 时没有带 -a 选项,这个状态下的文件不会被提交)
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)

现在有两个操作可供选择,要么把暂存区的所有内容添加到当前分支上;要么清除暂存区回退成与分支内容一致,但工作区没有清除,若想把工作区也清除,就得在使用git checkout -- file(这里的--后面有一个空格键)命令了。详细解说如下:

方法一,
按提示的来:"git checkout -- <file>...,发现还是不行,其它兄弟试了下是可以的,法一居然不行,其它兄弟试可以,最后用了法二:
git checkout -- ./WxPayApi.php #某个文件
git checkout -- *  #这命令是还原当前分支下的所有修改到stage上并未commit的文件,-- 后面是文件名的意思。

以上方法没有办法搞定,奇怪了,最后还是用最后,这样解决了:
git commit -am"解决一下Master的:Changed but not updated" , 用:-am,Git的小乌龟难道看不到吗?奇怪了,默认就是-am呀,所有人都用乌龟就好了 ,绝对不会出现问题,哈哈,命令行捣蛋了???
解决办法继续参看:http://blog.csdn.net/qq_38801354/article/details/72793909



方法二、
用git commit -am"个人自媒体代码的Dev分支也解决一下Dev分支的问题,给全提交到仓库。",再提交Git服务器仓库,得以解决。
先检出Master:
$git checkout master
M       api.jackxiang.com/components/WxPay/WxPayApi.php
M       api.jackxiang.com/components/WxPay/WxPayConfig.php
M       api.jackxiang.com/components/WxPay/WxPayDataBase.php
M       api.jackxiang.com/components/WxPay/WxPayException.ph
核对还是有问题:
$git status
# On branch dev
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   api.jackxiang.com/components/WxPay/WxPayApi.php

git commit -am"只有这样解决了上面这个Changed but not updated问题"
$git commit -am"解决一下Master的:Changed but not updated"

把所有的都给提交了(Dev没有改动,无所谓):
git push --all

同理那个Dev分支也是一样的道理:
$git checkout master
$git status
$git commit -am"个人自媒体代码的Dev分支也解决一下Dev分支的问题,给全提交到仓库。"




================================================================================
从一个分支A切换到另一个分支B后,对切换后的B分支进行pull操作,因为pull操作实际上包含了fetch+merge操作,在执行 merge操作时,由于很长时间没有对B分支执行过pull/merge操作,本地的B分支库与remote中的B分支库中的差异很大(且这些差异是其他 同事开发的文件),merge时产生冲突,使得B分支的状态为merging,其实是指merge失败,还停留在merge状态,也不能执行pull操 作。这时没有解决冲突,而是从B分支上执行checkout/switchto操作,试图再切换其他分支时,报:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
…….java : needs merge  
…….java : needs merge  
…….java : needs merge  
error : you need to resolve your current index first  
的错,google了半天,终于在stackoverflow上找到了答案,大题意思是:merge失败,有conflicts没解决,可以:
1、解决conflicts后再次执行merge;
2、回退到merge前
恩,既然merge冲突是其他同事的文件,我不需要去resolve conflicts,那就退回merge前吧,单纯的改我的文件再push吧,执行以下代码:
[plain] view plaincopy在CODE上查看代码片派生到我的代码片
git reset --merge  
搞定!

顺便贴下stackoverflow上的链接:
http://stackoverflow.com/questions/6006737/git-merge-errors
本文参考来自链接:https://www.lbbniu.com/3059.html
背景:在windows下提交了一个git更新,想在linux下强制更新(这个linux下的文件也被我改动了),以windows下提交的为准怎么办?还会出错,如下:
Git pull 强制覆盖本地文件,与在git bash下实践OK,AddTime:2016-9-29

git fetch --all  
git reset --hard origin/master
git pull


git reset --hard origin/xiangdong

来自:http://blog.csdn.net/baple/article/details/49872765

main分支:


一)出错:
新增文件add commit后,push回原分支失败,报错:
  Counting objects: 20, done.
  Delta compression using up to 24 threads.
  Compressing objects: 100% (11/11), done.
  Writing objects: 100% (11/11), 1.30 KiB, done.
  Total 11 (delta 5), reused 0 (delta 0)
  error: insufficient permission for adding an object to repository database ./objects


二)git本地有修改如何强制更新到远程:
本地有修改和提交,如何强制用远程的库更新更新。我尝试过用git pull -f,总是提示 You have not concluded your merge. (MERGE_HEAD exists)。
我需要放弃本地的修改,用远程的库的内容就可以,应该如何做?傻傻地办法就是用心的目录重新clone一个,正确的做法是什么?

正确的做法应该是:
git fetch --all
git reset --hard origin/master
git fetch 只是下载远程的库的内容,不做任何的合并git reset 把HEAD指向刚刚下载的最新的版本

参考链接:

http://stackoverflow.com/questions/1125968/force-git-to-overwrite-local-files-on-pull
实际情况:git mv后的情况及提交,只能分开提交(如果:git commit -a"" fileA fileB...),没法和文件一块Commit! 没有试过:git commit -am"xxx",应该可以。
git rename怎么搞:
设置git库为大小写敏感(不建议)
$
git config core.ignorecase false
使用git mv命令(仅当core.ignorecase为true时可用)
$ git mv ABC.java
Abc.java

$ git status

......
renamed:
ABC.java -> Abc.java
实践发现问题:
1)Linux系统权限不对也会引起下面的问题。
2)有兄弟说那个暂时过渡一下,我是权限问题导致。
Git命令错误记录之git mv: fatal: renaming failed: Permission denied
git mv gittest.net.conf jackxiang.net.conf    
fatal: renaming 'playbook/baige.cctv.com/files/jackxiang.net.conf' failed: Permission denied


运行环境:Windows 7,git version 1.9.5.github.0
解决方法:通过创建一个临时文件夹名字来中转。例如:

git mv oldFolderName tempFolderName
git mv tempFolderName newFolderName
From:http://www.cnblogs.com/sincerely/p/4230531.html
More:http://blog.csdn.net/njafei/article/details/53433023

git mv后的情况及提交,只能分开提交,没法和文件一块Commit:
git commit -m"renamed and deleted file"
[master 2626a4d] renamed and deleted file
4 files changed, 0 insertions(+), 12 deletions(-)
rename playbook/baige.jackxiang.com/files/{api.baiger.com.conf => api.baiger.jackxiang.com.conf} (100%)
delete mode 100644 playbook/baige.jackxiang.com/files/mount.sh
rename playbook/baige.jackxiang.com/files/{upload.baige.com.conf => upload.baige.jackxiang.com.conf} (100%)
rename playbook/baige.jackxiang.com/{manage.baige.jackxiang.net.yml => manage.baige.jackxiang.net.yml} (100%)


git status
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#       renamed:    files/api.baiger.com.conf -> files/api.baiger.jackxiang.com.conf
#       deleted:    files/mount.sh
#       renamed:    files/upload.baige.com.conf -> files/upload.baige.jackxiang.com.conf
#       renamed:    manage.baige.jackxiang.net.yml -> manage.baige.jackxiang.net.yml


http://blog.csdn.net/get_set/article/details/51018142
分页: 2/2 第一页 上页 1 2 最后页 [ 显示模式: 摘要 | 列表 ]