git add rsynctimer
fatal: playbook/bc.qr.*.cn/files/rsynctimer 中的 CRLF 将被 LF 替换

注意顺序,别搞反了:

上面这样修改后,git diff *.yml也认为是binary,无法git diff,还得这样,
让.out是可执行程序,因为gcc hello.c -o hello.out
于是 .out是可执行的二进制文件得了,作如下修改,正确如下:




it add playbook/bc.qr.*.cn/files/rsynctimer/rsynctimer.out
fatal: playbook/bc.qr.*.cn/files/rsynctimer/rsynctimer.out 中的 CRLF 将被 LF 替换

git diff  playbook/bc.qr.*.cn/bc_web.yml   #正常git diff

以上实践来自:http://www.it1352.com/798609.html
更多配置上的原理:https://www.jianshu.com/p/2a46dfd3705a
Create an empty file called .gitkeep in the directory, and add that.

来自:https://stackoverflow.com/questions/115983/how-can-i-add-an-empty-directory-to-a-git-repository
From: https://www.zhihu.com/question/29811994
git pull  #出现:please enter a commit message to explain why this merge is necessary 请输入一个提交消息来解释为什么这个合并是必要的
Merge made by the 'recursive' strategy.
...277\220\347\273\264\346\211\213\345\206\214.md" | 23 ++++------------------
1 file changed, 4 insertions(+), 19 deletions(-)
阅读全文
现象:git checkout dev,出现,error: pathspec 'dev' did not match any file(s) known to git.
阅读全文
git version 2.7.4在提交时出现 push.default 警告问题。
两步解决:
步骤一:git config --global push.default simple
步骤二:git push -u origin master  #第一次,或:git push -u origin devel
步骤三:后再直接执行 git push 就可以了。


新建立分支后及时上面设置还是会报错怎么办?如下:
#git push
fatal: 当前分支 release1 没有对应的上游分支。
为推送当前分支并建立与远程上游的跟踪,使用

    git push --set-upstream origin release1

git config -l|grep simple
push.default=simple

按它提示的设置一下呢?就好了,如下:

git push --set-upstream origin release1
Total 0 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for release1, visit:
.....
remote:
To git@gitlab.xxx.com.cn:devel/iot.lewo.com.git
* [new branch]      release1 -> release1
分支 release1 设置为跟踪来自 origin 的远程分支 release1。

在merge后,其并没有啥状态不一样的,因为没有冲突啥的,Merge后,以及提交后的一个对比:
Merge后:
#git status
位于分支 release1
无文件要提交,干净的工作区
提交Merge到GitServer后(git push --set-upstream origin release1):
#git status
位于分支 release1
您的分支与上游分支 'origin/release1' 一致。
无文件要提交,干净的工作区

=====================实践如下======================


git提交时,出现问题如下:
#git push origin/devel
warning: push.default 尚未设置,它的默认值在 Git 2.0 已从 'matching'
变更为 'simple'。若要不再显示本信息并保持传统习惯,进行如下设置:

  git config --global push.default matching

若要不再显示本信息并从现在开始采用新的使用习惯,设置:

  git config --global push.default simple

当 push.default 设置为 'matching' 后,git 将推送和远程同名的所有
本地分支。

从 Git 2.0 开始,Git 默认采用更为保守的 'simple' 模式,只推送当前
分支到远程关联的同名分支,即 'git push' 推送当前分支。

参见 'git help config' 并查找 'push.default' 以获取更多信息。
('simple' 模式由 Git 1.7.11 版本引入。如果您有时要使用老版本的 Git,
为保持兼容,请用 'current' 代替 'simple')

fatal: 'origin/devel' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
来自:https://www.zhihu.com/question/20019419
The -u tells Git to remember the parameters, so that next time we can simply run git push and Git will know what to do.相当于第一次串门的时候你登了个记办了个vip。。以后再来就知道是你来了。不用脱裤子搜身了

链接:https://www.zhihu.com/question/20019419/answer/80590142

由于git的index文件出错。

需要删除.git/index文件,

然后运行git reset,重新生成index文件。
git reset还可以删除已经commit,但未push上去的信息。

From:https://my.oschina.net/dyxp/blog/380642
背景:Git分不同角色在提交时,root提交时是administrator(Crontab用来Pull一些Ansible脚本到本地), 而xiangdong提交时是xiangdong,往往容易出现一个问题是不小心给root了,这块一是xiangdong上去有时权限不够可能切换为root了,另一个是登录时可能就是Root用户,一提交就成Admin了。鉴于此,自己整个C代码实现提交判断,这样接管了git push,从而对粗心的我来讲起到一个助理的作用。

一、搞这玩意儿的原因:
root情况:

xiangdong:

解决一个无论是root还是xiangdong的环境下,只需要执行下面我们搞的这个c语言生成的二进制文件就能一直只以向东的用户进行提交git,看起来扯淡,但还是有点用的,敲啥呢: gitpush ,和git push只是没有那个空格了。经实践证明是可行的,如下:


二、生产这个玩意的过程:
源码及Makefile和生成的二进制文件路径:


Makefile文件内容:
cat Makefile

源代码:cat gitpush.c



最后,PATH路径:
cat /etc/profile.d/gitpush.sh


三、验证步骤阶段:
root下执行情况:
#gitpush
#gitpush
当前登陆的用户名为:root
current working directory : /home/xiangdong/shell
The UID is 0
The login name is xiangdong
The forbidlogin name is root
请小心,你现在正在Root环境下面,不过没关系,我给你切换到xiangdong用户并作提交。执行git push命令:/usr/bin/sudo -i -u xiangdong -H cd /home/xiangdong/shell && git push
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 288 bytes, done.
Total 3 (delta 1), reused 1 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
   bd83c51..b400811  master -> master

xiangdong下面执行情况:
$gitpush
执行:cd /home/xiangdong/shell && git push
Counting objects: 5, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 277 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@gitlab.qr.justwinit.net:levooops/shell.git
   b400811..0b19550  master -> master

成功Log:
$git log
commit 0b195507efa6278774d4f500a7086003d6744684
Author: xiangdong <xiangdong@justwinit.cn>
Date:   Sun Oct 1 23:15:32 2017 +0800

    加上README.md

commit b40081190bf020d49375a4117a181f00ea0a2503
Author: xiangdong <xiangdong@justwinit.cn>
Date:   Sun Oct 1 23:09:58 2017 +0800

    加上README.md

================================================================================
附录:
为什么 sudo cd 会报错 command not found:
https://www.starduster.me/2015/09/12/why-command-not-found-when-sudo-cd/

相关函数:get_current_dir_name, getwd, chdir
头文件:#include <unistd.h>
定义函数:char * getcwd(char * buf, size_t size);
函数说明:getcwd()会将当前的工作目录绝对路径复制到参数buf 所指的内存空间,参数size 为buf 的空间大小。
注:
1、在调用此函数时,buf 所指的内存空间要足够大。若工作目录绝对路径的字符串长度超过参数size 大小,则返回NULL,errno 的值则为ERANGE。
2、倘若参数buf 为NULL,getcwd()会依参数size 的大小自动配置内存(使用malloc()),如果参数size 也为0,则getcwd()会依工作目录绝对路径的字符串程度来决定所配置的内存大小,进程可以在使用完次字符串后利用free()来释放此空间。

返回值:执行成功则将结果复制到参数buf 所指的内存空间, 或是返回自动配置的字符串指针. 失败返回NULL,错误代码存于errno.

范例


执行:
current working directory :/tmp

cat test_processname.cpp



g++ test_processname.cpp -o gitpush
mv /tmp/gp /usr/local/gitpush/gitpush

cat /etc/profile.d/gp.sh
export PATH=$PATH:/usr/local/gitpush

#gp
directory:/usr/local/gitpush/
processname:gp
current working directory : /root


./gitpush
directory:/tmp/
processname:gitpush
current working directory : /tmp
The UID is 0
The login name is xiangdong
我的问题:git pull
error: Untracked working tree file 'playbook/ml.qr.justwinit.cn/process.yml' would be overwritten by merge.  Aborting
git fetch --all && git reset --hard origin/master
一、解决办法:


二、再git pull就没有问题了,当然,你的改动也被回退了,得先备份再做这个操作:
$git pull
Already up-to-date.

三、重新将文件放进去,再进行commit后push,没毛病:
git commit -m"xxx" ishow.justwinit.cn.conf.j2
git push
Counting objects: 11, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 815 bytes, done.
Total 6 (delta 3), reused 0 (delta 0)
To git@gitlab.qr.cntv.net:irdcops/ansible.git
   d33031a..eb4ad86  master -> master
来自:https://www.codecaptain.io/reference/git/the-following-untracked-working-tree-files-would-be-overwritten-by-merge
     git中可以承载多个DAGs Repo一样的情况 git checkout --orphan命令。 git的常见用例是此功能是保持独立的文档和github的gh pages孤立的分支branch来创建一个静态网站。
孤立分支特征:
1)master好孤立分支是一个.git仓库里面的两颗独立的数,也就是说他俩没法合并。
2)master默认是保护的,建议把master 干掉,默认保护master的变为master.andorid,类似这样的。
3)孤立分支里面再建立分支,他们之间和常规分支一样的,没有区别。
一)其他用例孤立的分支有哪些?
可能的用法是用于将多个系统信息库组合成一个。 是一些例子:
Combining多个git库?
在这些情况下你必须在同一个档案库中的两个独立DAG之前合并到一个统一的目录树。 因此在长期使用,但这不是尽可能多的操作将暂时通过的状态使用单独的DAG所在的系统信息库中。

二)来自操作手册:
###创建孤立分支
    git version 1.7.2+

    # 创建
    git checkout --orphan <newbranch>
    
    # 删除无用文件
    git rm -rf .

    # 提交“空”内容
    git commit --allow-empty -m "[empty] initial commit"

    # 把新创建的本地分支,推送到远端仓库,保持跟踪
    git push -u origin <newbranch>


三)实践建一个“孤立”的空分支操作如下,命令来地址(https://ihower.tw/blog/archives/5691):


在Gitlab的Web界面里测试一下孤立分支:
newbranch   Merge RequestCompare Select Archive Format
754a735a · 测试一下刚建立的孤立分支  · 2 minutes ago

参考:https://ooso.net/archives/636
Git的克隆,默认是直接拉取整个远程仓库,如果项目比较大,大量和自己无关的内容也会拉到本地,占用很多硬盘空间。

在网上搜了一下,Git在1.7版本后,已经支持只Checkout部分内容,这个功能叫做 sparse checkout(稀疏检出)。
打开 sparse checkout 功能
如果本地还没有建版本库,要用这个功能,先进入要放版本库的目录,在命令行执行几条命令:


实践一下:


实践发现也就只有这一个目录了,添加2个目录到checkout的列表。路径是版本库下的相对路径,也可以用文本编辑器编辑这个文件。
$git pull origin master
From gitlab.jackxiang.com:irdcops/spec
* branch            master     -> FETCH_HEAD
$ls      #也就只Checkout这个目录,要多条就多加几个即可。
centos6

参考来源:https://zhgcao.github.io/2016/05/11/git-sparse-checkout/
http://www.tuicool.com/articles/QjEvQvr
详细点的参考:
https://my.oschina.net/u/183217/blog/185289?p=%7B%7BcurrentPage+1%7D%7D

发现对于目录有点的这种情况,好像实践发现不行如:jackxiang.com 这样的目录。
背景:用了SVN的同志老想着把Git当SVN用(如新加了几个文件,就从SVN里找出来,再拷贝到测试环境,这种事情,Git直接以灵活的版本机制想去哪个版本就去哪个版本。),但也提供了查看某个版本到哪个版本修改了哪些文件的一个命令行。
在测试环境想切换到某个版本就直接用命令就能过去了,什么,测试不会用Git.....。



From:https://segmentfault.com/q/1010000000133613
--------------------------------------------------------------------------------------------------------------------------------------------------------------
Git 的每个提交都有一个 SHA1 散列值(Hash 值)作为 ID。我们可以在 checkout 命令中使用这些 ID 作为起点。比如:
git checkout -b name-of-new-branch 169d2dc
这样,Git 的活动分支会切换到 name-of-new-branch 这个分支上,而它的内容与 169d2dc 这个分支一致。
注意:SHA1 的散列值有 40 个字母,相当长。所以 Git 允许我们在不引起歧义的情况下,使用散列值的前几位作为缩写。


一、查看某个提交到某个提交之前的文件名:
git diff --name-status HEAD~2 HEAD~3
git diff hash1 hash1 --stat
如果是branch的话
git diff branch1 branch2 --stat
加上 --stat 是显示文件列表, 否则是文件内容diff
git diff <commit> <commit>
上面的 <commit> 表示提交生成的 hash 串, 例如:
git diff b45ba47d1b297217e3ec6a3ab0f61716a8d6ecbc c244d0bf06d56ec86aaedeefa5dcd84dd9febc60
一般来说,通过 hash 串的前 4~6 位就可以区分,所示可以简写为:
git diff b45b 355e



第二步就是对上面的文件列表,进行按自己修改了哪些文件进行修改Checkout出来可上到测试环境:

二、提交的某个版本给Checkout出来:
大多数时候,我们可能只需要对某一个文件做细小的修补,因此只 checkout 该文件就行了,并不需要操作整个 commit 或分支。
上一节我们介绍了如何将某个历史版本完整地 checkout 到工作区。实际上,我们只需要在上一节的命令之后加上需要 checkout 的文件即可。
git checkout <sha1-of-a-commit> </path/to/your/file>
当然,有时候你需要将某个文件的历史版本 checkout 出来,并以一个新的名字保存。这时候可以这么做:
git checkout <sha1-of-a-commit>:</path/to/your/file> </new/name/of/the/file>
背景:jenkins有一个好处是可以对多个项目进行用户登录集成发布,而自己搞就是Git钩子触发写的脚本去rsync部署一下,这样没有配置管理的概念,说实话配置管理对于程序员来讲可能刚开始并不理解,但它的存在也有它的道理,没有用为何还催生了配置管理员了呢?是吧。

git hook 加一个rsync脚本就可以完成了,在500块钱的VPS上面搞jenkins,不如在本地搞?
放本地没时间呐,我就下班在地铁上弄弄,网络的好控制。
http://www.tuicool.com/articles/yyEfu2u

--------2017年干点正事---------
跳梁者(73465XX)  10:20:46
你看看你们这些人
顾问好不容易 不去群里逗你们了 办点正事儿 也不支持
赶紧弄点难得 让顾问多忙会儿
Persi(62832XX)  10:22:09
给swoole加几个功能啊,这个事就够他忙的了
error: insufficient permission for adding an object to repository database .git/objects  
fatal: failed to write object  
fatal: unpack-objects failed
$git pull
remote: Counting objects: 24, done.
remote: Compressing objects: 100% (23/23), done.
remote: Total 24 (delta 14), reused 3 (delta 1)
error: insufficient permission for adding an object to repository database .git/objects
首先,得是Root:
#id
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

然后:到那个出现 错的项目目录下面,它下面有一个.git这是肯定的,
1)对这个.git目录权限给斧正:
chmod 755 .git
chown -R xiangdong.irdcops .git  

2)给它下面的文件和文件夹的权限斧正:
cd .git
find . -type f -exec chmod 644 {} \;
find . -type d -exec chmod 755 {} \;

参考:http://blog.sina.com.cn/s/blog_87b9bbc70102uyo3.html
git commit -am"" #提交除开没有Add的文件外的所有修改,如:git rm ,git mv,git add....
-----------
背景:一般是自己领先master几个版本,二是自己落后master几个版本,三是自己无论落后还是先进都和Master对齐(比如:分支,git checkout -b feature,修改index.html,再转到git checkout master,再合并分支到master,git merge feature...,最后,解决冲突并git add index.html,当然也可以commit -am....,提交并无误的情况下,删除git的特征分支:git branch -d  feature ),如何解决上面三种冲突并能正常提交呢?
零、关于从暂存区回退方面的文章见:https://justwinit.cn/post/9253/
一、Git服务端版本领先问题参考:https://justwinit.cn/post/9300/
二、Git服务端版本落后问题本文解决:
#git push
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
! [rejected]        master -> master (fetch first)
error: 无法推送一些引用到 'git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git'
提示:更新被拒绝,因为远程仓库包含您本地尚不存在的提交。这通常是因为另外
提示:一个仓库已向该引用进行了推送。再次推送前,您可能需要先整合远程变更
提示:(如 'git pull ...')。
提示:详见 'git push --help' 中的 'Note about fast-forwards' 小节。

[root@levoo-php-memcached-reids-zookeeper_bj_sjs_10_51_77_34:/tmp/gitstudy/conflict/spec.boosh.com.cn]
#git pull
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
展开对象中: 100% (3/3), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
   c333506..47f275b  master     -> origin/master
自动合并 README.md
冲突(内容):合并冲突于 README.md
自动合并失败,修正冲突然后提交修正的结果。

====================git status 提示双方修改:README.md====================
#git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 1 和 1 处不同的提交。
  (使用 "git pull" 来合并远程分支)
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

        双方修改:   README.md

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

=====================查看文件=================================
#cat README.md  
<<<<<<< HEAD
conflict  9:57 modify
=======
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59
>>>>>>> 47f275befbc4fcd306eb4978fb75dde0545b040b

==================解决README.md文件===============
cat README.md
conflict  9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59

================再查看该文件并pull一下查看状态================
git pull
error: Pull is not possible because you have unmerged files.
提示:请在工作区改正文件,然后酌情使用 'git add/rm <文件>' 命令标记
提示:解决方案并提交。
fatal: Exiting because of an unresolved conflict.

===理解修改尚未加入提交(使用 "git add" 和/或 "git commit -a")=====
git commit-m与-am的区别:https://segmentfault.com/q/1010000005900988
标识:也就是说得理解那几个区,这个-a 是指虽然跟踪了,但是没有git add纳入暂存区(自己已经纳入了,但是因为冲突了,别人修改了,它并没有在自己这边的暂存区里的意思。还得通过git add一次纳入自己本地的暂存区,或直接-a就能把本地合并冲突的文件直接纳入到暂存区,有点绕,应该就是这个意思,就可以git push解决这个冲突了。)
[注意]git commit -am可以写成git commit -a -m,但不能写成git commit -m -a,如果里面有一些草稿文件也就是并不需要提交的其它的文件本就在里面,会被一并提交上暂存区,这个一定要注意用-am时要把它们都删除掉,只留下需要入暂存区的文件,否则,会把所有的没有用的文件纳入后,再git push一下就会出现把很多没有用的文件提交上git服务器上去了。

==========实践上面的理解=============================================
git commit -am"解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。"
[master 0006642] 解决冲突后,纳入自己的暂存区里 commit -am中的a就是这个意思,代替了git add 。

============解决冲突后放到暂存区后,再Git push也就成功能======================================
git push
对象计数中: 6, 完成.
压缩对象中: 100% (5/5), 完成.
写入对象中: 100% (6/6), 873 bytes | 0 bytes/s, 完成.
Total 6 (delta 0), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
   47f275b..0006642  master -> master


最后,果然提交成功,在那个老王的git目录下,再 git pull无问题,查看内容也就下来了:
git pull
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
展开对象中: 100% (6/6), 完成.
来自 git.boosh.com.cn:irdcops/spec.boosh.com.cn
   47f275b..0006642  master     -> origin/master
更新 47f275b..0006642
Fast-forward
README.md | 1 +
1 file changed, 1 insertion(+)

cat README.md
conflict  9:57 modify
老王在这儿提交了一个并给提交到线上去了。-addTime:20170410 9:59



三、git reset revert 回退回滚取消提交返回上一版本,最常用的是合并feature 分支的冲突解决:
一般没有别人开发出现冲突,是因自己回退引起的,
git reset revert 回退回滚取消提交返回上一版本:http://justwinit.cn/post/9253/
解决冲突合并分支:
http://m.toutiao.org/group/6407171134127472898/?iid=8936996522&app=news_article&tt_from=weixin&utm_source=weixin&utm_medium=toutiao_ios&utm_campaign=client_share&wxshare_count=1
实践成功如下步骤,注意,这种合并都是基于那个暂存库:

显示本地分支:
git branch
* master

新建分支
准备新的feature1分支,继续我们的新分支开发:
#git checkout -b feature  #它是建立并进入到刚进入的分支。
切换到一个新分支 'feature'
再次建立的提示:
git checkout -b feature
fatal: 一个分支名 'feature' 已经存在。

查看分支的建立情况,有了:
git branch
* feature
  master

修改文件 修改index.html:
#echo conflict >> index.html
vi index.html
hello jack ,write by feature...

在feature分支上提交:
git add index.html
git commit -m"提交到分支" ./index.html
===================================================================================================
切换回master分支:
git checkout master
A       index.html
切换到分支 'master'
您的分支与上游分支 'origin/master' 一致。


master分支修改:
在master分支上修改index.html:
echo master_conflict >> index.html
vi index.html
add by jack from master...
提交到暂存库:
git commit -am"写两个字试一试吧~"

分支合并
这种情况下,Git无法执行“快速合并”,只能试图把各自的修改合并起来,但这种合并就可能会有冲突,我们试试看:
git merge feature
自动合并 index.html
冲突(内容):合并冲突于 index.html
自动合并失败,修正冲突然后提交修正的结果。

#cat index.html
create confilict with feature branch
master_conflict
<<<<<<< HEAD
add by jack from master...
=======
jackX

hello jack ,write by feature...
>>>>>>> feature

#git status  #这儿注意了:用git commit -am"" 还是用git add index再git commit -m"" index.html的区别,前面有讲到。
位于分支 master
您的分支领先 'origin/master' 共 1 个提交。
  (使用 "git push" 来发布您的本地提交)
您有尚未合并的路径。
  (解决冲突并运行 "git commit")

未合并的路径:
  (使用 "git add <文件>..." 标记解决方案)

        双方修改:   index.html

修改尚未加入提交(使用 "git add" 和/或 "git commit -a")
#git commit -am"直接am实现不用git add 就提交到master的暂存库里"  
[master 386a151] 直接am实现不用git add 就提交到master的暂存库里
#git push
对象计数中: 12, 完成.
压缩对象中: 100% (11/11), 完成.
写入对象中: 100% (12/12), 1.20 KiB | 0 bytes/s, 完成.
Total 12 (delta 5), reused 0 (delta 0)
To git@git.boosh.com.cn:irdcops/spec.boosh.com.cn.git
   e171ea5..386a151  master -> master


最后,删除feature分支:
# git branch -d feature
已删除分支 feature(曾为 4bcdf8e)。



------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
想从线上获取并覆盖本地:
git reset --hard
git pull
实践如下:
git reset --hard
HEAD 现在位于 a7e4eed rollo back
git log
commit a7e4eed0755b8b8c28de63ecc735565169466f8d
Author: 詹金斯 <17080156868@163.com>
Date:   Mon Mar 27 20:55:07 2017 +0800
    rollo back

再想回退是不行的:
git revert 0b82ab0dd0c898e0b7c18714a8b81b417f80a7bb zookeeper-3.4.9.el6.x86_64.spec
fatal: bad revision 'zookeeper-3.4.9.el6.x86_64.spec'

查看状态:
git status
位于分支 master
您的分支和 'origin/master' 出现了偏离,
并且分别有 2 和 2 处不同的提交。
  (使用 "git pull" 来合并远程分支)
未跟踪的文件:
  (使用 "git add <文件>..." 以包含要提交的内容)

再从Git服务器上拉取:
git pull
自动合并 centos7/zookeeper-3.4.9.el6.x86_64.spec
冲突(内容):合并冲突于 centos7/zookeeper-3.4.9.el6.x86_64.spec
自动合并失败,修正冲突然后提交修正的结果。

=======================================================
如果系统中有一些配置文件在服务器上做了配置修改,然后后续开发又新添加一些配置项的时候,

在发布这个配置文件的时候,会发生代码冲突:

error: Your local changes to the following files would be overwritten by merge:
        protected/config/main.php
Please, commit your changes or stash them before you can merge.

如果希望保留生产服务器上所做的改动,仅仅并入新配置项, 处理方法如下:

git stash
git pull
git stash pop
然后可以使用Git diff -w +文件名 来确认代码自动合并的情况.



反过来,如果希望用代码库中的文件完全覆盖本地工作版本. 方法如下:

git reset --hard
git pull
其中git reset是针对版本,如果想针对文件回退本地修改,使用

在CODE上查看代码片派生到我的代码片
git checkout HEAD file/to/restore  


参考自:http://blog.chinaunix.net/uid-10415985-id-4142896.html
http://blog.csdn.net/iefreer/article/details/7679631
   刚升级了下VPS到2G,那个GitLab真耗内存:发现内存很重要,会影响CPU负载和磁盘的IO,因为内存不够系统会把磁盘当内存,进而CPU和磁盘都忙起来了,性能上不去,出现IO负载高。 -swoole顾问 2017 1st 语录

然而你如果了解硬件会发现磁盘并不能当内存用,存的只是地址

是的,所以,钱能解决问题的,别去技术解决,我用自己的VPS实践发现的,想各种优化都不行,还是花钱买内存解决了。现象:每次jenkins 去pull git把我那台git的机器pull 成高负载了,jenkins出现504错误。


而且内存不足的话linux的oom-killer机制会杀掉一些进程释放内存,虚拟内存搞了一个1024M,用了近1G,这个gitlab吃内存呐,可不是省油的灯呐。

可能源码安装要好一些,好在像MySQL/Redis可以分开在不同的机器上:
源码安装Gitlab8.16自己参考链接:http://jackxiang.com/post/4318/
背景:常常我们用git pull 命令较多,而用git fetch较少,这两者有可区别,而我们在开发时可先用git fetch再git merge可能更安全一些,因为咱完全不用像git pull一样立即就自动merge可以用git diff进行比对。
Git中从远程的分支获取最新的版本到本地有这样2个命令:
1. git fetch:相当于是从远程获取最新版本到本地,不会自动merge
git fetch origin master
git log -p master..origin/master
git merge origin/master
    以上命令的含义:
   首先从远程的origin的master主分支下载最新的版本到origin/master分支上
   然后比较本地的master分支和origin/master分支的差别
   最后进行合并
   上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmp
git diff tmp
git merge tmp
    从远程获取最新的版本到本地的test分支上
   之后再进行比较合并
2. git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些
因为在merge前,我们可以查看更新情况,然后再决定是否合并
结束


来自:https://zhidao.baidu.com/question/200204875340723965.html
=====================================================
模拟实践如下:

$git fetch origin master
From gitlab.boosh.com.cn:lvdev/jackxiang.com
* branch            master     -> FETCH_HEAD

如果有变化,可:
$git diff

$git merge origin/master
Merge made by recursive.
.../static/js/manifest.334733dc1613e9cc4ac4.js     |    2 ++
.../static/js/manifest.334733dc1613e9cc4ac4.js.map |    1 +
2 files changed, 3 insertions(+), 0 deletions(-)
create mode 100644 jackxiang.com/static/js/manifest.334733dc1613e9cc4ac4.js
create mode 100644 jackxiang.com/static/js/manifest.334733dc1613e9cc4ac4.js.map

重来一次,这次fetch时结果没有变化的情况:
From gitlab.boosh.com.cn:lvdev/jackxiang.com
* branch            master     -> FETCH_HEAD

$git merge origin/master
Already up-to-date.

分页: 1/2 第一页 1 2 下页 最后页 [ 显示模式: 摘要 | 列表 ]