git 基础教程 (一) 创建、修改、提交

参考资料:
http://www.vogella.com/articles/Git/article.html

安装Git

Linux

在Ubuntu上较高版本有自带Git,当然也可以通过apt来安装git命令行工具

sudo apt-get install git-core

redhat/centOS 安装Git 可以参考 CentOS 5.8 安装 git

Windows

msysgit项目提供的:http://code.google.com/p/msysgit/
github for windows:http://windows.github.com/

Mac OS

Git for OS X : http://code.google.com/p/git-osx-installer

git 常见命令

# 安装好之后输入 git 回车
git
最常用的 git 命令有:
   add        添加文件内容至索引
   bisect     通过二分查找定位引入 bug 的变更
   branch     列出、创建或删除分支
   checkout   检出一个分支或路径到工作区
   clone      克隆一个版本库到一个新目录
   commit     记录变更到版本库
   diff       显示提交之间、提交和工作区之间等的差异
   fetch      从另外一个版本库下载对象和引用
   grep       输出和模式匹配的行
   init       创建一个空的 Git 版本库或重新初始化一个已存在的版本库
   log        显示提交日志
   merge      合并两个或更多开发历史
   mv         移动或重命名一个文件、目录或符号链接
   pull       获取并合并另外的版本库或一个本地分支
   push       更新远程引用和相关的对象
   rebase     本地提交转移至更新后的上游分支中
   reset      重置当前HEAD到指定状态
   rm         从工作区和索引中删除文件
   show       显示各种类型的对象
   status     显示工作区状态
   tag        创建、列出、删除或校验一个GPG签名的 tag 对象

配置

Git 允许我们在 .gitconfig 文件中保存全局设置. 这个文件位于用户的home目录. 每次提交都会保存作者和提交者的信息,这些信息都可以保存在全局配置中。

获取Git配置信息列表:

git config --list

配置用户名和Email

# 配置全局用户名
git config --global user.name "Alan"
# 配置全局email
git config --global user.email "your.email@gmail.com"
# 设置push的全局默认操作为 matcheing 即匹配的情况下不会用户的push
git config --global push.default "matching"
# 查看配置列表
git config --list

终端配置高亮

git config --global color.status auto
git config --global color.branch auto

设置默认编辑器
git会使用系统默认的编辑器,我们也可以手动设置这一选项

git config --global core.editor vim 

除了全局配置之外,用户每次新建的git仓库也有自己的局部配置,位于 当前git项目的 .git 目录下。所有的git设置选项都在这个手册中能找到: git 配置手册

创建 git 仓库

创建文件夹

首先需要一个存放仓库的文件夹,我们可以通过以下代码来创建

# 切换到 home 目录
cd ~/

# 创建一个存放的文件夹并切换到该目录下
mkdir ~/project_main
cd project_main

# create a new directory
mkdir datafiles 

创建 Git 仓库

每一个Git库在刚创建的时候就会初始化一个 .git 文件夹来保存这个资料库的完整的历史信息,在 .git/config 文件包含当前资料库的配置信息。

如下代码则是在当前文件夹中创建了一个 git 资料库

# 在当前文件夹下初始化一个 Git 资料库
git init 

输出:

初始化空的 Git 版本库于 /home/project_main/.git/

添加一些内容

# 切换到这个库下(刚刚init的文件夹)
cd ~/project_main

# 创建一些文件
touch test01
touch test02
touch test03
# 再来个文件夹
mkdir datafiles
touch datafiles/data.txt

# 使用 > 命令将 ls 命令的输出导入到test01中
ls > test01 

查看库状态

git status 命令可以显示工作树状态,也就是文件的改变(添加、删除、部分修改等等)。它可以显示文件的合并冲突(当前库与远程库不一致)并且就对于这些改变用户可以做的事情而提出建议,例如将更改添加到索引或者删除等等。

git status 

输出:

# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#       datafiles/
#       test01
#       test02
#       test03
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

添加文件到 Git 索引

在将修改提交到 Git 库之前,你需要通过添加(add)操作来mark出你想要提交到Git索引的改变。这实际上是一个暂时的提交列表, 如果你后来又改变了其中的某一个文件,不用担心,这还不是正式提交,你只需要再add一次来更新你的提交列表就可以了(与远程库交互的时候,这样可以节省很多不必要的麻烦)。

# 添加所有文件(夹)到当前 Git 库的索引(临时提交列表)
git add . 

接着可以再次运行 git status 命令来观察当前状态。

git status

输出:

# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#       新文件:    datafiles/data.txt
#       新文件:    test01
#       新文件:    test02
#       新文件:    test03
#
# 再添加一个文件
touch datafiles/data2.txt
# 查看状态
git status

输出:

# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#       新文件:    datafiles/data.txt
#       新文件:    test01
#       新文件:    test02
#       新文件:    test03
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#       datafiles/data2.txt

接着添加更改就是了:

git add datafiles/data2.txt

自己可以再通过 git status 查看一下临时提交列表。如果当前没有做任何修改,或者修改都已经提交那么这会显示:

git status
# 位于分支 master
无文件要提交,干净的工作区

正式提交到 Git 库

确定好了之后,你就可以正式提交了。这个操作会添加一个Git库中所有文件的快照。“-m”选项表示附加注释内容,如果你没有在命令中就使用 -m 附上注释,你的默认编辑器就会自动启动所以你也可以在编辑器中留下你想标注的信息。

# 正式提交变更到本地资料库 
# 同时附上标注信息 “项目初始化”
git commit -m "项目初始化" 

输出:

[master(根提交) ee4b843] 项目初始化
 Committer: root <root@localhost.localdomain>
您的姓名和邮件地址基于登录名和主机名进行了自动设置。请检查它们正确
与否。您可以通过下面的命令对其进行明确地设置以免再出现本提示信息:

    git config --global user.name "Your Name"
    git config --global user.email you@example.com

设置完毕后,您可以用下面的命令来修正本次提交所使用的用户身份:

    git commit --amend --reset-author

 5 files changed, 4 insertions(+)
 create mode 100644 datafiles/data.txt
 create mode 100644 datafiles/data2.txt
 create mode 100644 test01
 create mode 100644 test02
 create mode 100644 test03

好吧,这是一个小插曲。这个git是博主刚装的新版的,提示我添加名称和邮件了。当然,读者不要对此不以为然,当你一个人用git的时候这个可能不大重要,但是多人操作一个项目的时候名称标识可是很重要的,希望大家养成习惯配置好这些选项。

git config --global user.name "Lellansin"
git config --global user.email lellansin@gmail.com
# 没加 “-m” vim自动弹出来了 ":q"直接离开 (哈哈,博主又偷懒了)
git commit --amend --reset-author
[master 2401c44] 项目初始化
 5 files changed, 4 insertions(+)
 create mode 100644 datafiles/data.txt
 create mode 100644 datafiles/data2.txt
 create mode 100644 test01
 create mode 100644 test02
 create mode 100644 test03

查看你的 Git 库

操作日志

我们所做的所有操作都已建了一个 本地 Git 库保存在 .git文件夹中,其中还包括我们所正式提交到库中的的所有文件(夹)的快照。(注意只是本地的库,不一定与远程库同步)

# 查看 Git 操作日志
git log
# 以下是具体日志内容
# 其中的 Author(作者)还是博主刚刚临时改的(笑
commit 2401c44005fa2d81190c5105cfd164e490c71633
Author: Lellansin <lellansin@gmail.com>
Date:   Sun Apr 21 22:49:56 2013 +0800

    项目初始化

当日志比较长的时候(如果你有按着本例的做实验那么很可能马上就碰到),git log 查看日志时模式与vim有些类似,需要按“q”退出,上下箭头和翻页键可以翻页,通过“/string”和“?string”可以查找字符串“string”区别是一个向下、一个向上。

备注:如果一次都没有提交可能出现 “fatal: bad default revision ‘HEAD’” 这样的提示。

删除文件以及修改提交

如果你删除了一个文件,那么 “git add . ” 命令不会将该文件加入提交列表

你可以使用 git rm 命令来从你的工作目录中删除一个文件,并将这个删除操作添加到下一个提交列表中。

# 创建一个文件
touch delete_try.txt
# 添加到提交列表 并且同时("&&"操作) 提交这个列表
git add . && git commit -m "添加个文件来删删看 =。= "

# 可以翻下日志
git log

# 使用 Git 的移除命令
git rm delete_try.txt

# 提交这个移除操作
git commit -m "删掉了 delete_try.txt 文件"

# 日志君你好
git log

我们直接看最后的日志吧(日志君辛苦了):

commit d5a781496af0bfd5d856f7ea9bec452b83b184dd
Author: Lellansin <lellansin@gmail.com>
Date:   Sun Apr 21 23:29:13 2013 +0800

    删掉了 delete_try.txt 文件

commit d48fbf6a662b403f89c0bfba7fd811b7e86c3437
Author: Lellansin <lellansin@gmail.com>
Date:   Sun Apr 21 23:27:31 2013 +0800

    添加个文件来删删看 =。=

commit 2401c44005fa2d81190c5105cfd164e490c71633
Author: Lellansin <lellansin@gmail.com>
Date:   Sun Apr 21 22:49:56 2013 +0800

    项目初始化

或者你可以在使用 git commit 命令来提交的时候(git add 也是可以的)通过 “-a” 或者 “-A” 选项刷,来确认临时提交列表中的删除(否则有删除是不能提交的哦)。

# 新建一个文件并且提交到 Git库中的版本控制中
touch wait_delete.txt
git add . && git commit -m "又建了一个待删的文件"

# 删除这个文件
rm wait_delete.txt

# 尝试用平常的方法来提交 --> 不起作用的 ^_^~
git add . && git commit -m "让我提交吧"

输出:

# 位于分支 master
# 尚未暂存以备提交的变更:
#   (使用 "git add/rm <file>..." 更新要提交的内容)
#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)
#
#       删除:      wait_delete.txt
#
修改尚未加入提交(使用 "git add" 和/或 "git commit -a")

# 通过使用 -a 选项来刷新提交列表
git commit -a -m "文件 wait_delete.txt 现在终于删掉了"

# 或者 你可以通过 add 命令 来确认临时列表中被删除的文件:
# git add -A . 
# git commit -m "文件 wait_delete.txt 这样也可以删滴" 

从临时列表中删除文件删除文件

你可以使用 git reset [filename] 命令来从临时列表中删除一个原本通过git add 命令添加的文件。

# 创建一个文件并添加到临时提交列表
touch unwantedstaged.txt
git add unwantedstaged.txt

# 不是日志君哦,当前临时列表的状态请使用 git status 来查看
git status

# 从临时列表中删除
git reset unwantedstaged.txt

# 状态君你也好 (笑
git status

# 那么,作为善后我们最好删掉这个文件
rm unwantedstaged.txt 

通过 git amend 修正提交

git –amend 命令可以让我们修改上一次提交的注释信息。

假设我们上一次提交的信息写错了字。那么这个命令可以通过 –amend 参数来修正。

# 假设你做了一些修改,现在要提交了
touch bug.txt
git add bug.txt

git commit -m "我的信息不小心写错了" 
git commit --amend -m "BUG.txt已添加 --- 注释已修正" 

我们最好应该在提交还未被别人所分享之前使用 git –amend 命令。因为 git –amend 命令创建一个新的 commit ID 而别人已却经有可能在我们之后做了更多的操作。这种情况下他们需要将所做的操作迁移到这个新的提交上。

WIN7 开启远程连接以及远程桌面连接

远程连接(通过IP访问共享文件夹)

由于Windows7 Telnet服务默认不开启,所以需要执行一下操作

开启服务

一:控制面板-程序-开启或关闭Windows功能-telnet服务器、telnet客户端勾上。

二:控制面板-管理工具-服务(或者开始-运行-services.msc)开启telnet服务(如果开启不了则右键-

属性-查看最后一个选项页-找到依赖项-开启前两个)

开启来宾用户

开始-双击右上角的图片-省略

访问

开始-运行-输入\192.168.X.X

远程桌面连接

一关闭防火墙

二为管理员设置密码,以便访问者访问

三我的电脑-右键属性-远程设置-远程-允许远程协助远程这台计算机、允许运用任意版本远程。。。 勾上

四控制面板-管理工具-服务-开启Remote Desktop Services(含截图)

C语言入门教程 索引

在线视频地址

新浪视频:http://video.sina.com.cn/search/index.php?k=C语言入门教程+lellansin
Acfun.tv:http://www.bilibili.tv/search?keyword=C语言入门教程
Bilibili.tv:http://www.acfun.tv/search.aspx#query=C语言入门教程

下载地址:

网盘地址: http://pan.baidu.com/share/link?shareid=100331&uk=941304789/

联系方式

QQ群:

  • C/C++ beginner 一群 10191598
  • C/C++ beginner 二群 163859361
  • C/C++ beginner 三群 10366953

C语言 运行外部程序

system()

库:stdlib.h
通过system()调用操作系统, 执行DOS命令(CMD命令), 如:

#include <stdio.h>

int main()
{
    system("dir C:");
    return 0;
}

这里就调用了dir命令, 将C:目录中的文件列举出来 (拓展 CMD基础知识)

使用system()来执行程序:

#相对路径
system("hello.exe");
#绝对路径
system("D:Testhello.exe");
#使用 start 命令调用程序
system("start C:Program Files (x86)TencentQQIntlBinQQ.exe");

cmd的start命令会启动一个独立的窗口来运行指定的程序或命令。
直接使用文件名执行与start执行的区别在于,直接执行是单线程的如果当前命令没执行完线程会一直阻塞,而start命令则是新开一个线程去执行命令,不用等你新开的程序执行完,当前cmd中的程序就会继续执行下去。

exec函数族

库:process.h
通过进程调用程序

// 相关函数列表
int execl  ( char *pathname, char *arg0, char *arg1, ... )
int execle ( char *pathname, char *arg0, char *arg1, ..., char *argn, NULL, char *envp[])
int execlp ( char *pathname, char *arg0, char *arg1, ..., NULL)
int execlpe( char *pathname, char *arg0, char *arg1, ..., NULL, char *envp[])
int execv  ( char *pathname, char *argv[])
int execve ( char *pathname, char *argv[], char *envp[])
int execvp ( char *pathname, char *argv[]) 
int execvpe( char *pathname, char *argv[], char *envp[])

简单介绍一下第一个execl()

函数定义:int execl(const char *path, const char *arg, …);

函数说明:execl()用来执行参数path字符串所代表的文件路径, 接下来的参数代表执行该文件时传递的argv[0],argv[1]…..最后一个参数必须用空指针NULL作结束。

返回值 :成功则不返回值, 失败返回-1, 失败原因存于errno中

#include <stdio.h>
#include <process.h>

int main()
{
	printf("调用D盘Test目录下的hello.exe, 第一个参数为改应用程序的名称");
	execl("D:\Test\hello.exe","hello");
	printf("进程已经被递交给了hello.exe,这里不会再执行");
}

windows api

其他还有windows api当中的调用函数

  • WinExec()
  • ShellExecute()
  • CreateProcess()