使用git编译调试代码
⑴ 怎样使用git将本地代码上传到服务器
注册账户以及创建仓库
要想使用github第一步当然是注册github账号了。之后就可以创建仓库了(免费用户只能建公共仓库),Create a New Repository,填好名称后Create,之后会出现一些仓库的配置信息,这也是一个git的简单教程。步骤如下:
打开https://github.com直接在首页上注册
2)上传到github
$ git push origin master
git push命令会将本地仓库推送到远程服务器。
git pull命令则相反。
注:首次提交,先git pull下,修改完代码后,使用git status可以查看文件的差别,使用git add 添加要commit的文件。
大功告成,现在你知道如何将本地的项目提交到github上了。
gitignore文件
.gitignore顾名思义就是告诉git需要忽略的文件,这是一个很重要并且很实用的文件。一般我们写完代码后会执行编译、调试等操作,这期间会产生很多中间文件和可执行文件,这些都不是代码文件,是不需要git来管理的。我们在git status的时候会看到很多这样的文件,如果用git add -A来添加的话会把他们都加进去,而手动一个个添加的话也太麻烦了。这时我们就需要.gitignore了。
Git命令
查看、添加、提交、删除、找回,重置修改文件
git help <command> # 显示command的helpgit show # 显示某次提交的内容 git show $idgit co -- <file> # 抛弃工作区修改git co . # 抛弃工作区修改git add <file> # 将工作文件修改提交到本地暂存区git add . # 将所有修改过的工作文件提交暂存区git rm <file> # 从版本库中删除文件git rm <file> --cached # 从版本库中删除文件,但不删除文件git reset <file> # 从暂存区恢复到工作文件git reset -- . # 从暂存区恢复到工作文件git reset --hard # 恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改git ci <file> git ci . git ci -a # 将git add, git rm和git ci等操作都合并在一起做git ci -am "some comments"git ci --amend # 修改最后一次提交记录git revert <$id> # 恢复某次提交的状态,恢复动作本身也创建次提交对象git revert HEAD # 恢复最后一次提交的状态
查看文件diff
git diff <file> # 比较当前文件和暂存区文件差异 git diffgit diff <id1><id2> # 比较两次提交之间的差异git diff <branch1>..<branch2> # 在两个分支之间比较git diff --staged # 比较暂存区和版本库差异git diff --cached # 比较暂存区和版本库差异git diff --stat # 仅仅比较统计信息
查看提交记录
git log git log <file> # 查看该文件每次提交记录git log -p <file> # 查看每次详细修改内容的diffgit log -p -2 # 查看最近两次详细修改内容的diffgit log --stat #查看提交统计信息
tig
Mac上可以使用tig代替diff和log,brew install tig
Git 本地分支管理
查看、切换、创建和删除分支
git br -r # 查看远程分支git br <new_branch> # 创建新的分支git br -v # 查看各个分支最后提交信息git br --merged # 查看已经被合并到当前分支的分支git br --no-merged # 查看尚未被合并到当前分支的分支git co <branch> # 切换到某个分支git co -b <new_branch> # 创建新的分支,并且切换过去git co -b <new_branch> <branch> # 基于branch创建新的new_branchgit co $id # 把某次历史提交记录checkout出来,但无分支信息,切换到其他分支会自动删除git co $id -b <new_branch> # 把某次历史提交记录checkout出来,创建成一个分支git br -d <branch> # 删除某个分支git br -D <branch> # 强制删除某个分支 (未被合并的分支被删除的时候需要强制)
分支合并和rebase
git merge <branch> # 将branch分支合并到当前分支git merge origin/master --no-ff # 不要Fast-Foward合并,这样可以生成merge提交git rebase master <branch> # 将master rebase到branch,相当于: git co <branch> && git rebase master && git co master && git merge <branch>
Git补丁管理(方便在多台机器上开发同步时用)
git diff > ../sync.patch # 生成补丁git apply ../sync.patch # 打补丁git apply --check ../sync.patch #测试补丁能否成功
Git暂存管理
git stash # 暂存git stash list # 列所有stashgit stash apply # 恢复暂存的内容git stash drop # 删除暂存区Git远程分支管理
git pull # 抓取远程仓库所有分支更新并合并到本地git pull --no-ff # 抓取远程仓库所有分支更新并合并到本地,不要快进合并git fetch origin # 抓取远程仓库更新git merge origin/master # 将远程主分支合并到本地当前分支git co --track origin/branch # 跟踪某个远程分支创建相应的本地分支git co -b <local_branch> origin/<remote_branch> # 基于远程分支创建本地分支,功能同上
git push # push所有分支
git push origin master # 将本地主分支推到远程主分支git push -u origin master # 将本地主分支推到远程(如无远程主分支则创建,用于初始化远程仓库)git push origin <local_branch> # 创建远程分支, origin是远程仓库名git push origin <local_branch>:<remote_branch> # 创建远程分支git push origin :<remote_branch> #先删除本地分支(git br -d <branch>),然后再push删除远程分支
Git远程仓库管理
git remote -v # 查看远程服务器地址和仓库名称git remote show origin # 查看远程服务器仓库状态git remote add origin git@ github:robbin/robbin_site.git # 添加远程仓库地址git remote set-url origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址(用于修改远程仓库地址) git remote rm <repository> # 删除远程仓库
创建远程仓库
git clone --bare robbin_site robbin_site.git # 用带版本的项目创建纯版本仓库scp -r my_project.git git@ git.csdn.net:~ # 将纯仓库上传到服务器上mkdir robbin_site.git && cd robbin_site.git && git --bare init # 在服务器创建纯仓库git remote add origin git@ github.com:robbin/robbin_site.git # 设置远程仓库地址git push -u origin master # 客户端首次提交git push -u origin develop # 首次将本地develop分支提交到远程develop分支,并且trackgit remote set-head origin master # 设置远程仓库的HEAD指向master分支
也可以命令设置跟踪远程库和本地库
git branch --set-upstream master origin/master
git branch --set-upstream develop origin/develop此文章属转载,原文地址:http://1ke.co/course/194另附: 解决 在使用git 对源代码进行push到gitHub时可能会出错,error: failed to push some refs to git。出现错误的主要原因是github中的README.md文件不在本地代码目录中可以通过如下命令进行github与本地代码合并: git pull --rebase origin master重新执行之前的git push 命令,成功!
⑵ 如何在Windows下编译或调试Mysql
用vs code 就可以了。
Visual Studio Code
Visual Studio Code(简称VS Code)是由微软开发的,同时支持Windows、linux和macOS操作系统的开源文本编辑器。它支持调试,内置了Git 版本控制功能,同时也具有开发环境功能,例如代码补全(类似于IntelliSense)、代码片段、代码重构等。该编辑器支持用户自定义配置,例如改变主题颜色、键盘快捷方式、编辑器属性和其他参数,还支持扩展程序并在编辑器中内置了扩展程序管理的功能。
安装LLDB
LLDB是LLVM编译器的一部分,推荐使用Homebrew安装LLVM工具集,不建议使用系统自带的LLDB,安装前必须先创建证书否则无法安装,步骤如下:
创建完成后,开始安装LLVM
brew install llvm --with-python@2--with-lldb
安装插件
VS Code自带有debug功能,这里我推荐使用LLDB Debugger插件。
接下来,为项目配置调试参数。
配置调试参数
使用VS Code打开MySQL源码目录,在侧边栏选择debug栏目,添加配置,program输入需要调试的程序路径,这里选择你编译好的mysqld路径,args输入程序启动所需的参数,通常会指定mysqld的配置文件。这样就配置好了,是不是很简单。
启动调试
点击启动按钮,启动后如果没有设置断点会mysqld会正常启动,如果触发了断点会如下图显示。
整个调试窗口基本分为六部分,所有的调试操作都在这里完成:
1:显示变量信息
2:设置重点关注的变量
3:显示调用栈信息
4:设置断点信息,在代码行号前也可以设置断点
5:代码显示区域,上方是调试按钮,包括 continue/stepover/step in/step out/restart/stop
6:调试终端输入输出区
断点设置
在代码行号前点击即可在该行为设置断点,也可以根据条件设置断点。以设置ConditionalBreakpoint为例,当程序启动后会按照你设置的条件表达式判断是否触发断点。
Conditional Breakpoint这种方式用在目标变量达到某条件时触发断点,其余则跳过继续执行。比如:设置变量等于目标表名时触发断点,其余表则跳过,相对函数名断点省去很多手工跳过操作。
远程调试
假如你想调试远程Linux服务器上的MySQL上面的方法就不合适了,这时需要远程调试。lldb和gdb都支持远程调试,这里以lldb为例。
需要先在远程主机上安装lldb,使用yum安装,源地址在这里http://mirror.centos.org/centos/7/sclo/x86_64/rh
remote$ yum install -y llvm-toolset-7
安装完成后,启动lldb-server
remote$ /opt/rh/llvm-toolset-7/root/usr/bin/lldb-serverplatform --listen"*:9191"--server
接下来,在VS Code调试界面中新增配置项。
{
"type":"lldb",
"request":"attach",
"name":"Remote attach",
"program":"~/mysql5626/usr/local/mysql/bin/mysqld",
"pid":"<target_pid>",
"initCommands": [
"platform select remote-linux",
"platform connect connect://<remote_host>:9191"
],
"sourceMap": {
"/export/home/pb2/build/sb_0-15908961-1436910670.17/mysql-5.6.26":"/Users/hongbin/workbench/mysql-server"
}
},
program:本机也要拷贝一份目标程序,加载
pid:填写远程主机的mysqld进程id
sourceMap:填写mysqld编译的代码路径与本机代码库路径的映射,这样调试时代码才可以和程序关联在一起看
注意:记得调试前将代码切换到与目标程序版本一致的branch
⑶ 如何利用git制作和提交patch
如何利用git制作和提交patch
UNIX世界的软件开发大多都是协作式的,因此,Patch(补丁)是一个相当重要的东西,因为几乎所有的大型UNIX项目的普通贡献者,都是通过 Patch来提交代码的。作为最重要的开源项目之一,Linux,也是这样的。普通开发者从软件仓库clone下代码,然后写入代码,做一个Patch, 最后用E-mail发给Linux Kernel的维护者就好了。Git最初作为Linux的版本控制工具,提供了透明、完整、稳定的Patch功能。
我们先介绍一下Patch是什么。如果一个软件有了新版本,我们可以完整地下载新版本的代码进行编译安装。然而,像Linux Kernel这样的大型项目,代码即使压缩,也超过70MB,每次全新下载是有相当大的代价的。然而,每次更新变动的代码可能不超过1MB,因此,我们只 要能够有两个版本代码的diff的数据,应该就可以以极低的代价更新程序了。因此,Larry Wall开发了一个工具:patch。它可以根据一个diff文件进行版本更新。
不过在git中,我们没有必要直接使用diff和patch来做补丁,这样做既危险又麻烦。git提供了两种简单的patch方案。一是用git diff生成的标准patch,二是git format-patch生成的Git专用Patch。
1.git diff生成的标准patch
我们可以首先用git diff制作一个patch。本文示例的工作目录里最初有一个文件a,内容是“This is the file a.”,放置在master分支中。为了修改代码,我们一般的做法是建立一个新分支:
sweetm@sweetm-ASUS:~/GitEx$ git branch Fix
sweetm@sweetm-ASUS:~/GitEx$ git checkout Fix
Switched to branch 'Fix'
接下来我们在a文件里面追加一行,然后执行git diff。
sweetm@sweetm-ASUS:~/GitEx$ echo 'Fix!!!'>;>a
sweetm@sweetm-ASUS:~/GitEx$ git diff
diff --git a/a b/a
index 4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
This is the file a.
+Fix!!!
我们看到了Git diff的输出,这是一个非常典型的Patch式diff。这样我们可以直接把这个输出变为一个Patch:
sweetm@sweetm-ASUS:~/GitEx$ git commit -a -m "Fix"
[Fix b88c46b] Fix
1 files changed, 1 insertions(+), 0 deletions(-)
sweetm@sweetm-ASUS:~/GitEx$ git diff master > patch
sweetm@sweetm-ASUS:~/GitEx$ git checkout master
Switched to branch 'master'
我们现在有一个patch文件,并且签出了master,接下来我们可以使用git apply来应用这个patch。当然了,实际应用中,我们不会这样在一个分支建patch,到另一个分支去应用,因为只有merge一下就好了。我们现 在权当没有这个Fix分支。一般情况下,为了保护master,我们会建立一个专门处理新交来的patch的分支:
sweetm@sweetm-ASUS:~/GitEx$ git branch PATCH
sweetm@sweetm-ASUS:~/GitEx$ git checkout PATCH
Switched to branch 'PATCH'
sweetm@sweetm-ASUS:~/GitEx$ git apply patch
sweetm@sweetm-ASUS:~/GitEx$ git commit -a -m "Patch Apply"
[PATCH 9740af8] Patch Apply
1 files changed, 1 insertions(+), 0 deletions(-)
看,现在我们在PATCH分支中应用了这个补丁,我们可以把PATCH分支和Fix比对一下,结果肯定是什么也没有,说明PATCH分支和Fix分支完全一样。patch应用成功。即使有多个文件git diff 也能生成一个patch。
2.git format-patch生成的git 专用补丁。
我们同样用上面那个例子的工作目录,这次,我们在Fix分支中的a添加了新行之后,用git format-patch生成一个patch。
sweetm@sweetm-ASUS:~/GitEx$ git checkout Fix
Switched to branch 'Fix'
sweetm@sweetm-ASUS:~/GitEx$ echo 'Fix!!!'>>a
sweetm@sweetm-ASUS:~/GitEx$ git commit -a -m "Fix1"
[Fix 6991743] Fix1
1 files changed, 1 insertions(+), 0 deletions(-)
sweetm@sweetm-ASUS:~/GitEx$ git format-patch -M master
0001-Fix1.patch
git format-patch的-M选项表示这个patch要和那个分支比对。现在它生成了一个patch文件,我们看看那是什么:
sweetm@sweetm-ASUS:~/GitEx$ cat 0001-Fix1.patch
From Mon Sep 17 00:00:00 2001
From: Sweetmplings <[email protected]>
Date: Mon, 29 Aug 2011 14:06:12 +0800
Subject: [PATCH] Fix1
---
a | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
diff --git a/a b/a
index 4add65f..0d295ac 100644
--- a/a
+++ b/a
@@ -1 +1,2 @@
This is the file a.
+Fix!!!
--
1.7.4.1
看,这次多了好多东西,不仅有diff的信息,还有提交者,时间等等,仔细一看你会发现,这是个E-mail的文件,你可以直接发送它!这种patch,我们要用git am来应用。
sweetm@sweetm-ASUS:~/GitEx$ git checkout master
Switched to branch 'master'
sweetm@sweetm-ASUS:~/GitEx$ git branch PATCH
sweetm@sweetm-ASUS:~/GitEx$ git checkout PATCH
sweetm@sweetm-ASUS:~/GitEx$ git am 0001-Fix1.patch
Applying: Fix1
sweetm@sweetm-ASUS:~/GitEx$ git commit -a -m "PATCH apply"
在提交了补丁之后,我们可以再看看目前文件a的情况:
sweetm@sweetm-ASUS:~/GitEx$ cat a
This is the file a.
Fix!!!
果然,多了一个Fix!!!
不过要注意的是,如果master与Fix分支中间有多次提交,它会针对每次提交生成一个patch。
提交补丁到邮件列表:
sweetm@sweetm-ASUS:~/GitEx$ git send-email --to <maintainer's email> --cc <mailing list> <your patch>
注意:git send-email在很多机器上没有默认安装,需要进行手动安装
总结一下,利用git format-patch制作补丁大概有以下步骤:1)新建分支 2)在新建的分支上进行相关修改 3)提交修改到本地数据库 4)针对上一个支生成补丁5)另外新建分支,验证补丁6)提交补丁到邮件列表
3.两种patch 的比较:
兼容性:很明显,git diff生成的Patch兼容性强。如果你在修改的代码的官方版本库不是Git管理的版本库,那么你必须使用git diff生成的patch才能让你的代码被项目的维护人接受。
除错功能:对于git diff生成的patch,你可以用git apply --check 查看补丁是否能够干净顺利地应用到当前分支中;如果git format-patch 生成的补丁不能打到当前分支,git am会给出提示,并协助你完成打补丁工作,你也可以使用git am -3进行三方合并,详细的做法可以参考git手册或者《Progit》。从这一点上看,两者除错功能都很强。
版本库信息:由于git format-patch生成的补丁中含有这个补丁开发者的名字,因此在应用补丁时,这个名字会被记录进版本库,显然,这样做是恰当的。因此,目前使用Git的开源社区往往建议大家使用format-patch生成补丁。
转载仅供参考,版权属于原作者。祝你愉快,满意请采纳哦
⑷ 如何使用Git在SAE部署代码
SAE近期的优化,目前已经支持Git,本文将介绍如何使用Git在SAE上部署代码。
使用Git进行代码管理,首先要在本地安装Git客户端,下载链接:http://www.git-scm.com/download/
Git客户端的安装与配置过程在此略去不讲,谷歌一下有很多相关的内容,今天我们的重点是如何使用Git在SAE上部署代码。
本文例子中使用的操作系统为Windows 8.1,应用语言为Python,应用名称为gitsrc。
代码管理方式的选择
在首次对应用进行代码管理时,有且仅有一次选择代码库管理方式的机会,在此我们选择Git。
此后应用的代码管理方式将不可变更。
创建完成后,可以在页面上看到应用的Git仓库地址:https://git.sinaapp.com/gitsrc/ 。
使用git clone克隆代码仓库
在命令提示符(cmd)下,cd到工作目录(本例为E:\sae),执行命令:
git clone -o sae https://git.sinaapp.com/gitsrc
其中gitsrc应替换为正确的应用名称
按照提示输入安全邮箱和密码,执行成功后,提示检出内容为空。
保存Git用户名和密码:
在%USERPROFILE%\_netrc文件中
添加如下内容,可以避免每次push时重复输入用户名和密码(未启用动态口令)
machine git.sinaapp.com
login 安全邮箱
password 密码
添加一个Git远程仓库sae,地址为:https://git.sinaapp.com/gitsrc
git remote add sae https://git.sinaapp.com/gitsrc
注:如果在git clone时添加了 -o sae 参数,此步骤可以省略。
首次创建分支(版本1)
在源码目录gitsrc下添加一个文件,例如index.wsgi,然后cd到源码目录下,执行如下指令:
cd gitsrc
git add .
git commit -am "init repo"
git push sae master:1
打印信息如下:
Counting objects: 3, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 371 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To https://git.sinaapp.com/gitsrc
* [new branch] master -> 1
版本的切换
SAE Git代码仓库通过分支(Branch)的方式,支持多个并存的代码版本。
使用git checkout命令可以在版本之间进行切换,例如执行命令:
git checkout 1
Switched to branch '1'
Your branch is up-to-date with 'sae/1'.
执行完毕后,即切换至分支1
新增和删除代码版本
当前位于分支1,执行下面的语句可以创建分支版本(例如版本2):
git branch 2
git push sae 2
执行如下命令,可以列出所有版本
git branch -a
从SAE服务器上删除版本2的代码。
git push sae :2
已经在SAE中指定为默认版本时,禁止删除。
提示错误信息:Permission denied: deleting default version is not allowed!
向Git代码库提交代码变更
在gitsrc目录下变更代码文件,例如新增了文件foo.html
依次执行下面的语句,将变更提交至SAE Git代码库(分支版本1):
git add --all
git commit -am "add foo.html"
git push sae 1
对于Python应用,与SVN代码库不同,新增版本时并不会默认生成index.wsgi,开发者需要自行添加这个文件。
⑸ 如何利用git往github上传代码
github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。这对于一般人来说公共仓库就已经足够了。
2)上传到github
$ git push origin master
git push命令会将本地仓库推送到远程服务器。
git pull命令则相反。
注:首次提交,先git pull下,修改完代码后,使用git status可以查看文件的差别,使用git add 添加要commit的文件。
大功告成,现在你知道如何将本地的项目提交到github上了。
gitignore文件
.gitignore顾名思义就是告诉git需要忽略的文件,这是一个很重要并且很实用的文件。一般我们写完代码后会执行编译、调试等操作,这期间会产生很多中间文件和可执行文件,这些都不是代码文件,是不需要git来管理的。我们在git
status的时候会看到很多这样的文件,如果用git add -A来添加的话会把他们都加进去,而手动一个个添加的话也太麻烦了。这时我们就需要.gitignore了。
⑹ linux怎样编译git源码包
方法/步骤1
用git --version命令检查是否已经安装
2
在CentOS5的版本,由于yum源中没有git,所以需要预先安装一系列的依赖包。在CentOS6的yum源中已经有git的版本了,可以直接使用yum源进行安装。
3
yum -y install git
但是yum源中安装的git版本是1.7.1,Github等需要的Git版本最低都不能低于1.7.2 。所以我们一般不用上面的方法,而是下载git源码编译安装。
END
编译安装git
1
首先更新系统
yum -y update
更新完成之后有6.5变成6.7了
⑺ 使用git查看代码改动
#include<stdio.h>
char*strcpy(chars[],chart[],intm);
voidmain()
{
chara[]="Iamastudent.";
charb[20]="