gittutorial(7)的学习

英文原版:https://www.kernel.org/pub/software/scm/git/docs/gittutorial.html

一、将自己的相关信息告诉git:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git config --global user.name "shanl"
shanl@shanl-VirtualBox:~/Work/GitStudy$ git config --global user.email "****@qq.com"

二、导入一个git项目:

假设在项目所在的文件夹为:/home/shanl/Work/GitStudy,在该目录下有一个main.c文件,那么导入一个git项目的步骤如下:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git init
Initialized empty Git repository in /home/shanl/Work/GitStudy/.git/
shanl@shanl-VirtualBox:~/Work/GitStudy$ git add .
shanl@shanl-VirtualBox:~/Work/GitStudy$ git commit
[master (root-commit) 2ae27a3] This is my first git project time:2013.8.20
 1 file changed, 7 insertions(+)
 create mode 100644 main.c

git init命令用于初始化当前所在目录的这个项目,shell返回的提示表明已经建立了一个.git隐藏目录来保存这个项目目前的进展信息。我们可以用ls -a看到它。

git add .这个命令要求git给我目前的这个项目制作一个快照snapshot(快照只是登记留名,快照不等于记录在案,git管快照叫做索引index)。快照一般会暂时存储在一个临时存储区域中。

git commit用于将快照里登记的内容永久写入git仓库中,也就是开发者已经想好了要提交自己的开发成果了。

三、查看git仓库和工作目录之间的差异:

我们的工作目录有一个main.c文件,内容如下:

#include <stdio.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}
由于之前已经使用git commit命令,将工作目录中的索引文件(执行git add .后生成的文件)同步到git仓库中,所以git仓库中的main.c 内容和索引文件里的main.c是一样的。

下面将工作目录中的main.c修改如下:

#include <stdio.h>

int main()
{
    printf("Shanl Study Git!\n");
    printf("Hello world!\n");
    return 0;
}
执行:shanl@shanl-VirtualBox:~/Work/GitStudy$ git diff --cached

发现没有任何输出,这是因为git diff 加上--cached参数目的是用来查看index file和仓库之间代码的区别的

如果不加--cahed,现象如下:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git diff
diff --git a/main.c b/main.c
index f170c55..6fe30f9 100644
--- a/main.c
+++ b/main.c
@@ -2,6 +2,7 @@
 
 int main()
 {
+       printf("Shanl Study Git!\n");
        printf("Hello world!\n");
        return 0;
 }
这是因为:省略–cached选项的话,就是比较working tree和index file的区别,我们并没有执行git add . ,同时又修改了Working tree中的main.c,所以会出现差异信息

除了使用git diff可以查看文件中的差异,还可以使用git status查看整个项目的差异:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	modified:   main.c
#
如何将差异的合并到git仓库?

使用下面的方法:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git add main.c
shanl@shanl-VirtualBox:~/Work/GitStudy$ git commit
[master fa74600] This is My second GitVersion : 0.0.2
 1 file changed, 1 insertion(+)

如何查看已经将差异合并到git仓库,使用git log命令进行查看:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git log
commit fa74600608a31d867ff9425645a37e6873940af9
Author: shanl <313905584@qq.com>
Date:   Tue Aug 20 20:44:27 2013 +0800

    This is My second GitVersion : 0.0.2

commit 2ae27a3cd380f94763b5177936cfeeb7da0440f7
Author: shanl <313905584@qq.com>
Date:   Tue Aug 20 20:17:01 2013 +0800

    This is my first git project
    time:2013.8.20
 This is My second GitVersion : 0.0.2 就是我合并差异后打印的信息。

再使用git diff命令就没有相关的信息输出了,如下所示:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git diff --cached
shanl@shanl-VirtualBox:~/Work/GitStudy$ git diff
shanl@shanl-VirtualBox:~/Work/GitStudy$

四、管理分支:

1、建立分支:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git branch experiment
2、查看分支:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git branch -a
  experiment
* master
从上面可以看到,当前分支是在master分支上。

3、切换分支:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git checkout experiment 
Switched to branch 'experiment'
在通过git branch查看,当前已经在experiment分支上了:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git branch 
* experiment
  master
在该分支下的main.c建立一个报时功能的程序,内容如下:

#include <stdio.h>
#include<time.h>

int main()
{
    time_t mytime;
    struct tm *mylocaltime;
    mytime=time(NULL);
    mylocaltime=localtime(&mytime);
    printf("Year:%d\n",mylocaltime->tm_year+1900);
    printf("Month:%d\n",mylocaltime->tm_mon+1);
    printf("Day:%d\n",mylocaltime->tm_mday);
    printf("Hour:%d\n",mylocaltime->tm_hour);
    printf("Min:%d\n",mylocaltime->tm_min);
    printf("Second:%d\n",mylocaltime->tm_sec);

    printf("Shanl Study Git!\n");
    printf("Hello world!\n");
    return 0;
}

下面的任务就是提交程序到分支项目:(注意虽然已经确认了分支的正确性,但还是不能着急报告给“主干道”,而还要先在分支上提交工作)

shanl@shanl-VirtualBox:~/Work/GitStudy$ git commit -a
[experiment 2fc1dcd] This is a timer function program
 1 file changed, 12 insertions(+)
git commit -a 将git add . 和git commit 整合在了一起,简化了操作。

然后就可以切换到“主干道”了:

shanl@shanl-VirtualBox:~/Work/GitStudy$ git checkout master 
Switched to branch 'master'

走在主干道上的你,无论使用log或是status命令都无法看到刚才在experimental分支所进行的工作。

为了让git处理分支的本领展现的淋漓尽致,我们现在在主干道上再做一些改进。我们希望程序在最开始执行的时候输出一行“Welcome to shanl's blog”。这行很简单,在主干道上完成后,main.c的内容如下:

#include <stdio.h>

int main()
{
    printf("Welcome to shanl's Blog!\n");
    printf("Shanl Study Git!\n");
    printf("Hello world!\n");
    return 0;
}

然后在主干道上使用git commit -a提交!

好!我们清理一下思路。在experiment分支上有一个增加了报时功能的main.c,而在主干道上有一个增加了welcome的main.c。它们都进行了git commit -a命令。


下面,我们就来合并“分支”和“主干道”(你猜会发生什么?):

使用:git merge experiment来合并分支到主干道

shanl@shanl-VirtualBox:~/Work/GitStudy$ git merge experiment 
Auto-merging main.c
CONFLICT (content): Merge conflict in main.c
Automatic merge failed; fix conflicts and then commit the result.
发现合并出错。

再打开主干道的main.c文件看下,内容为:

#include <stdio.h>
#include<time.h>

int main()
{
<<<<<<< HEAD
	printf("Welcome to shanl's Blog!\n");
=======
	time_t mytime;
	struct tm *mylocaltime;
	mytime=time(NULL);
	mylocaltime=localtime(&mytime);
	printf("Year:%d\n",mylocaltime->tm_year+1900);
	printf("Month:%d\n",mylocaltime->tm_mon+1);
	printf("Day:%d\n",mylocaltime->tm_mday);
	printf("Hour:%d\n",mylocaltime->tm_hour);
	printf("Min:%d\n",mylocaltime->tm_min);
	printf("Second:%d\n",mylocaltime->tm_sec);

>>>>>>> experiment
	printf("Shanl Study Git!\n");
	printf("Hello world!\n");
	return 0;
}
中间的加黑的 =======表示两端冲突代码的分隔。可以看出git迷惑之处在于它不知道是把 welcome这行放在前面还是把报时功能这段放在前面。

这样可以修改这个main.c文件设置为满意的位置,我修改的组中合并后的main.c内容如下;

#include <stdio.h>
#include<time.h>

int main()
{
    printf("Welcome to shanl's Blog!\n");
    time_t mytime;
    struct tm *mylocaltime;
    mytime=time(NULL);
    mylocaltime=localtime(&mytime);
    printf("Year:%d\n",mylocaltime->tm_year+1900);
    printf("Month:%d\n",mylocaltime->tm_mon+1);
    printf("Day:%d\n",mylocaltime->tm_mday);
    printf("Hour:%d\n",mylocaltime->tm_hour);
    printf("Min:%d\n",mylocaltime->tm_min);
    printf("Second:%d\n",mylocaltime->tm_sec);

    printf("Shanl Study Git!\n");
    printf("Hello world!\n");
    return 0;
}
最后执行:git commit -a即可合并成功并导入到仓库中。
shanl@shanl-VirtualBox:~/Work/GitStudy$ git commit -a
[master 64b4d7e] This is the new branch Merge branch 'experiment'

使用gitk命令打开图形化界面:




















以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值