Git和TortoiseGit的环境安装与使用

作者:陆金龙    发表时间:2018-03-25 00:37   

关键词:TortoiseGit图标不显示  

Git简介

Linus的第二个伟大作品

分布式,强调个体,速度快,灵活,已解决冲突,离线工作,每日工作备份

1 Git环境搭建

服务器基本搭建在Linux上。Windows上安装Git-1.7.9-preview20120201。

基本都是用默认选项,几个重要的界面选项如下:

使用默认的组件, 点击Next, 下一步

选择Git的命令行模式, 选择默认Git Bash 模式会创建一个快捷命令行, 点击Next下一步.

Finish 安装完成, 桌面会生成一个快捷图标。

 

2 Git使用

2.1 Git常用命令

2.1.1 创建git资源库

git init --bare <库名称>

kl@KINGLONG ~

$ cd /e/WorkData/code/gitcode

kl@KINGLONG /e/WorkData/code/gitcode

$ git init --bare openprj

Initialized empty Git repository in e:/WorkData/git/openprj/

2.1.2 clone资源

1.从用户文件夹clone资源

git clone <仓库目录>  <用户目录>

注意:clone时候用户目录必须为空

例如:$ git clone /e/WorkData/git/openprj .

2.从远程仓库clone资源

以从github上clone资源为例。

Git能在多种协议下使用,Git URL可能以ssh://, http(s)://, git://为前辍。

git://协议较为快速和有效,但有可能被公司的防火墙阻止(非http访问请求)。

例如,Git本身的源代码可以用 git:// 协议来访问:

git clone git://github.com/kinglong198404/android-architecture.git

也可以通过http 协议来访问:

git clone https://github.com/kinglong198404/android-architecture.git

2.1.3 添加文件到版本控制

git add <文件名>

git status  //查看状态信息 可看到readme.txt 的红色警告

git add readme.txt

2.1.4 提交到本地版本库

定位到master目录:cd /e/WorkData/code/gitcode/android-architecture

提交所有文件:git commit -m "提交到本地仓库"

如果报以下错误,删除index.lock文件后再提交:rm -f ./.git/index.lock

Unable to create 'E:/workdata/code/gitcode/android-architecture/.git/index.lock': File exists.

 

git commit <文件名> 或git commit

git commit readme.txt

 

要填写修改说明 按i 进入编辑模式,填写完成按esc退出编辑模式,然后按:wq保存

git commit -m “commit a file” readme.txt //带上修改注释

git commit -m “commit all files” //带上修改注释

 

2.1.5 推送到远程共享版本库

git push origin master

git push /e/WorkData/git/openprj master

 

如果报错信息如下:则是服务端没有授予当前账号相应权限,需联系管理员更改服务端配置。

You are not allowed to push code to protected branches on this project.。

如果报错信息如下:则是账号密码验证失败,应清除账号密码缓存后再提交,会弹出密码输入框。

emote: HTTP Basic: Access denied

fatal: Authentication failed for 'http://********

 

应清除账号密码的命令如下:

git config --system --unset credential.helper

如果以上操作还不能清除掉,在win10 用户凭据里删除相应项目:

控制面板 》 用户帐户 》 管理你的凭据
选择 [Windows 凭据]
git 保存的用户信息在普通凭据列表里,将其删除。

 

2.1.6 拉取最新的文件  

git pull

2.1.7 删除目录或文件

git rm -r --cached framework  # --cached不会把本地的framework目录删除

git commit -m 'deleted a folder'

git push -u origin master

2.1.8 覆盖本地目录或文件

git checkout 覆盖本地(不想保留本地的修改,用该命令同步到服务端版本)

撤销了所有的修改后,可以用git pull更新代码。

 

或者定位到项目目录依次执行以下命令:

git reset --hard origin/master

<span style="background-color: rgb(246, 248, 250); color: rgb(0, 0, 0); font-family: " source="" code="" pro",="" "dejavu="" sans="" mono",="" "ubuntu="" "anonymous="" "droid="" menlo,="" monaco,="" consolas,="" inconsolata,="" courier,="" monospace,="" "pingfang="" sc",="" "microsoft="" yahei",="" sans-serif;="" font-size:="" 14px;="" font-variant-ligatures:="" common-ligatures;="" white-space:="" pre;"="">git pull

2.1.9 git checkout

  A.操作文件 

    git checkout filename 放弃单个文件的修改

    git checkout . 放弃当前目录下的修改

  B.操作分支

    git checkout master 将分支切换到master

    git checkout -b master 如果分支存在则只切换分支,若不存在则创建并切换到master分支

      应用:将develop分支代码合并到master分支

               develop代码目录上右键->Git Bash Here,执行以下命令,如果有合并失败,解决冲突后,commit和push即可。

               git checkout master

               git merge develop

               git push (merge成功后也要push,否则代码没有提交到服务器的仓库)

               合并完成后,使用git checkout develop回到develop分支继续开发。

               

               将master分支合并到develop

               develop代码目录上右键->Git Bash Here,执行git merge origin/master,git push即可(需要填写合并的理由)。

2.1.10 更多相关

master(主分支,永远是可用的、稳定的、可直接发布的版本,不能直接在该分支上开发)

develop(开发主分支,代码永远是最新,所有新功能以这个分支来创建自己的开发分支,该分支只做只合并操作,不能直接在该分支上开发)
 
cd   //定位到项目要保存的目录
git clone -b develop http://git.local/remonde/cloud.git  //克隆分支
git log   //查看日志 可以看到提交过的各版本hash值
git reset --hard f36801544670e00b2f59a28e19017d2786c4085e   //回退到之前某次commit的版本
git checkout   //覆盖本地
git fsck --lost-found   //找回: add过但没commit过,被reset 的
 

2.2 git pull冲突解决

$ git pull

remote: Counting objects: 5, done.

remote: Compressing objects: 100% (2/2), done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (3/3), done.

From g:/software/repository/git/itheima26

   50db030..a04027a  master     -> origin/master

Auto-merging readme.txt

CONFLICT (content): Merge conflict in readme.txt

Automatic merge failed; fix conflicts and then commit the result.

 

解决方法:

1.git mergetool

调用上面命令之后会提示你输入编辑方法,输入:beyond compare 进入编辑器.

2.编辑完之后.调用git commit -a 把当前目录中所有都提交到本地库中.

3.git push origin master 提交到远程库中.

 

3.TortoiseGit使用

运行TortoiseGit-1.7.7.0-32bit.msi,按默认选项安装。

创建仓库:

Clone项目:

 

创建文件,add

提交内容:

Push到服务器:

点击空白地方(不是文件),右键菜单,选择TortoiseGit->Push

Pull从服务端获取代码:

4.TortoiseGit右键菜单不显示问题

安装完TortoiseGit之后,从远程仓库拉取项目的时候发现,右击没有TortoiseGit菜单。文件夹中TortoiseGit相关的状态图标不显示。

cmd窗口输入 regedit

定位到计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\ShellIconOverlayIdentifiers\  下:

Tortoise1xxx到Tortoise9xxxx 改名,可统一在前面加几个空格,让它们排在最前面。

重启explorer.exe进程(资源管理器)即可。

5.git中文乱码

5.1 git中文乱码问题

https://blog.csdn.net/xl_lx/article/details/78223349
1.C盘“用户”目录,当前用户名下有个.gitconfig 文件,如C:\Users\kl\.gitconfig。添加以下配置:
[core]
    quotepath = false
[gui]
    encoding = utf-8
[i18n]
    commitencoding = utf-8
    logoutputencoding = utf-8
2.编辑etc\profile文件,在文件末尾添加如下内容:
    export LESSHARESET=utf-8  
3.编辑etc\inputrc文件,修改output-meta和convert-meta属性值:
  set output-meta on  #bash可以正常输入中文  
  set convert-meta off  
4.编辑etc\git-completion.bash文件,在文件末尾增加以下内容:
  alias ls='ls --show-control-chars --color=auto'  #ls能够正常显示中文  

5.2  git bash下中文乱码解决办法

1.在git bash下,右键出现下图,选择options:
2.选择"Text"
3.将"Character set"设置为  UTF-8

5.3 tortoisegit 中文乱码

下载安装最新版:2.7.0
https://tortoisegit.org/download/