精华内容
下载资源
问答
  • 数据结构与算法题目集7-30——目录
    2018-12-06 21:55:39

    我的数据结构与算法题目集代码仓:https://github.com/617076674/Data-structure-and-algorithm-topic-set

    原题链接:https://pintia.cn/problem-sets/15/problems/857

    题目描述:

    知识点:深度优先遍历

    思路:先建树,再深度优先遍历

    用结构体file来作为树的节点,其中包含char name[261]存储文件名,bool型变量isDirectory表示是目录还是文件,bool型变量visited用来表示dfs过程中该文件节点是否被访问过,vector<file>型变量subFiles存储其子目录。

    题目给的每个字符串,表示的都是从root的第一个孩子开始的路径。因此,我们用一个vector<file>型变量files存储每个字符串中的文件值,依次将files中的文件通过函数void add(file &f, int index)添加进以root为根的树中。

    void add(file &f, int index)函数的实现如下

    注意,这个过程中我们会改变f文件的subFile值,所以需要传递引用。

    (1)如果index == files.size(),说明已经遍历完了files中的所有文件,直接return。

    (2)遍历f的子目录,寻找与files[index]名字相同且同是文件或同是目录的文件,如果找到,说明files[index]已经在f的子目录中,我们考虑第index + 1个文件,即递归地调用该函数add(f.subFiles[i], index + 1),并且返回。

    (3)如果(2)过程没有在f的子目录中寻找到files[index],将files[index]加入f的子孩子中,并且递归地调用该函数add(f.subFiles[f.subFiles.size() - 1], index + 1)。

    从root节点开始深度优先遍历这棵文件树,并用int型level变量记录空格数。

    void dfs(file &nowVisit, int level)函数的实现如下

    注意,这个过程中,我们会对f文件的subFile进行排序,所以需要传递引用。

    (1)如果当前文件还未被访问过,标记其已被访问,并且对其subFile进行排序。

    (2)输出当前空格数和文件名。

    (3)对其subFile里的文件,递归调用dfs函数,注意level需加2。

    时间复杂度和空间复杂度均与题给的数据有关,很难计算。

    C++代码:

    #include<iostream>
    #include<cstring>
    #include<vector>
    #include<algorithm>
    
    using namespace std;
    
    struct file {
    	char name[261];
    	bool isDirectory, visited;
    	vector<file> subFiles;
    };
    
    int N;
    file root;
    vector<file> files;
    
    void add(file &f, int index);
    bool cmp(file f1, file f2);
    void dfs(file &nowVisit, int level);
    
    int main() {
    	scanf("%d", &N);
    	strcpy(root.name, "root");
    	root.isDirectory = true;
    	root.visited = false;
    	for(int i = 0; i < N; i++) {
    		char line[270];
    		scanf("%s", line);
    		int j = 0;
    		files.clear();
    		while(j < strlen(line)) {
    			char str[270];
    			int point = 0;
    			while(j < strlen(line) && line[j] != '\\') {
    				str[point++] = line[j++];
    			}
    			str[point] = '\0';
    			file f;
    			if(j < strlen(line)) {
    				f.isDirectory = true;
    			} else {
    				f.isDirectory = false;
    			}
    			f.visited = false;
    			strcpy(f.name, str);
    			files.push_back(f);
    			j++;
    		}
    		add(root, 0);
    	}
    	dfs(root, 0);
    	return 0;
    }
    
    void add(file &f, int index) {
    	if(index == files.size()) {
    		return;
    	}
    	for(int i = 0; i < f.subFiles.size(); i++){
    		if(strcmp(f.subFiles[i].name, files[index].name) == 0 && f.subFiles[i].isDirectory == files[index].isDirectory) {
    			add(f.subFiles[i], index + 1);
    			return;
    		}
    	}
    	f.subFiles.push_back(files[index]);
    	add(f.subFiles[f.subFiles.size() - 1], index + 1);
    }
    
    bool cmp(file f1, file f2) {
    	if(f1.isDirectory && !f2.isDirectory) {
    		return true;
    	} else if(!f1.isDirectory && f2.isDirectory) {
    		return false;
    	} else {
    		return strcmp(f1.name, f2.name) < 0;
    	}
    }
    
    void dfs(file &nowVisit, int level) {
    	if(!nowVisit.visited) {
    		nowVisit.visited = true;
    		sort(nowVisit.subFiles.begin(), nowVisit.subFiles.end(), cmp);
    	}
    	printf("%*s%s\n", level, "", nowVisit.name);
    	for(vector<file>::iterator it = nowVisit.subFiles.begin(); it != nowVisit.subFiles.end(); it++) {
    		dfs(*it, level + 2);
    	}
    }

    C++解题报告:

     

    更多相关内容
  • SVN仓库目录结构

    千次阅读 2018-05-30 16:49:00
    SVN仓库目录结构Repository: trunktagsbranches trunk(主干|主线) branchs(分支) tags(标记) truck(主干|主线|主分支):是用来做主方向开发的,新功能的开发应放在主线中,当模块开发完成后,需要修改,就用...

    SVN仓库目录结构Repository:

    trunk
    tags
    branches

    trunk(主干|主线) branchs(分支) tags(标记)

    truck(主干|主线|主分支):是用来做主方向开发的,新功能的开发应放在主线中,当模块开发完成后,需要修改,就用branch。
    branch(分支):分支开发和主线开发是可以同时进行的,也就是并行开发,分支通常用于修复bug时使用

    tag(标记):用于标记某个可用的版本,可以标记已经上线发布的版本,也可以标记正在测试的版本,通常是只读的

     

    SVN具体操作步骤:(TortoiseSVN版本: 1.8.8)

    一:创建仓库

    1. 创建目录结构D:\TortoiseSVN\Repository\Repo-iOS

    2. 在该目录结构上右键

    ---> TortoiseSVN

    ---> Create repository here(创建仓库这里) 
    ---> Create folder structure(创建文件结构) ---> Start Repobrowser(开始仓库浏览) ---> Ok
           

    二:将项目上传到SVN上

           桌面右键

     

           ---> TortoiseSVN

           --->repo-browser--> URL:  file:///D:/TortoiseSVN/Repository/Repo-iOS ---> Ok

           --> 选中trunk文件夹右键

           ---> Add folder... 

           ---> 选中要上传到SVN的项目的最外层目录,输入日志

           ---> Ok
           

    三:Check Out 

    1. 在电脑任意位置创建一个存放项目代码的目录,例如:D:\TortoiseSVN\Repository\Source
    2. 将代码检出到该位置
       

    四:开发周期

           1. 在目录D:\TortoiseSVN\Repository\Source\trunk\MyAppProject上进行开发,注意是在trunk主线上

     

    因为项目刚建立,这是在开发新功能,所以要在主线上开发


           2. 开发一段时间后,经测试,上线到App Store,Android上传到其它应用商城,摘取上线时的HomeViewController文件中一段代码如下

     

    [objc]  view plain  copy
     
    1. - (void) viewDidLoad {  
    2.    [super viewDidLoad];  
    3.    // -----------------------------------------  
    4.     int y = 0;  
    5.     int result = 10 / y;     
    6.     NSLog(@"iOS APP 第一阶段开发完成了! 结果是:%ld", result);  
    7.    // End  
    8. }  

     

           3. 在D:\TortoiseSVN\Repository\Source\tags 目录下新建一个目录:1.0,并将该目录提交到SVN上,然后右键         D:\TortoiseSVN\Repository\Source\trunk\MyAppProject该目录---> TortoiseSVN---->Branch/tag... -----> To Path :/tags/1.0/MyAppProject 并选中 Head revision in repository ---> Ok此时Source/tags/1.0 目录中没有任何内容,需要更新一下该目录做update操作。更新之后看到一个完整的项目源码保存到该目录中(该目录下的源码可看做是trunk目录下版本为1.0的一个副本),查看一下/tags/1.0/HomeViewController中的viewDidLoad和trunk/MyAppProject/HomeViewController中的viewDidLoad代码完全一样。

           4. 开发下一阶段的新需求,开发中ing


           5. 用户或测试人员反馈应用有重大bug,需要立即修复该bug并尽快上线, 此时程序员需要为 tags/1.0 下的MyAppProject 打一个分支branch,
              操作过程如下:选中Source/tags/1.0/MyAppProject 右键 TortoiseSVN---->Branch/tag... -----> To Path :/branches/MyAppProject  ---> Ok
     此时看D:\TortoiseSVN\Repository\Source\branches目录下仍然没有任何内容,也需要update一下,更新之后发现该目录下
     也出现一个完整的项目代码(该代码可看做是tags/1.0/MyAppProject的一个副本),注意打分支和打标记都是使用Branch/tag...菜单,不同的是To Path 的目录不一样,图解看打分支的图,只是to path 值不一样,此时branches/MyAppProject/HomeViewController中的viewDidLoad和tags/1.0/MyAppProject/HomeViewController中的viewDidLoad代码完全一致。


           6. 切换工作空间,使用Xcode|Eclipse集成工具打开/branches/MyAppProject下的项目,然后在此基础上调试并修复bug,注意打开的必须是分支中的项目


           7. bug 修复好后,先提交修改的文件,并进行客户端App上线,上线完成后再将branches/MyAppProject/打个tag到1.0.1目录下(tags/1.0.1)(操作步骤同步骤3),tag操作完成后,可以看到tags/1.0.1/HomeViewController.viewDidLoad 和  branches/ MyAppProject/HomeViewController.viewDidLoad是完全一致的,将branches/MyAppProject打一个新的tag是以便于下次在此基础上再次修复bug,至此bug修复已经完成;修复bug后的代码如下:

     

    [objc]  view plain  copy
     
    1. - (void) viewDidLoad {  
    2.    [super viewDidLoad];  
    3.    // -----------------------------------------  
    4.     int y = 10;  
    5.     int result = 10 / y;  
    6.     NSLog(@"iOS APP 第一阶段开发完成了! 结果是:%ld", result);  
    7.    // End  
    8.   
    9.    NSLog(@"1.0 版本闪退bug 已修复, 程序出现除0异常");  
    10. }  

     

           8. 接下来将branch和trunk进行合并,操作步骤如下:

             右键 branches/MyAppProject ------>TortoiseSVN

             ----> Merge... 

             ---> Merge a range of revisions 

             ----> Next --->URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/trunk/MyAppProject 

             ----> Next

             ----> Merge
           

    9. 将trunk和branches进行合并 步骤如下,

      右键/turnk/MyAppProject ----> Merge... -----> Merge a range of revisions   -----> Next 

    ----->  URL to merge from : file:///D:/TortoiseSVN/Repository/Repo-iOS/branches/MyAppProject

      步骤同上,只是  URL to merge from   的路径不一样。合并完成后,查看一下/trunk/MyAppProject/HomeViewController/viewDidLoad方法如下:

     

    [objc]  view plain  copy
     
    1. - (void) viewDidLoad {  
    2.    [super viewDidLoad];  
    3.    // -----------------------------------------  
    4.     int y = <strong>10</strong>;            // <strong>可以看到branches分支中的代码已经合并到主线上了</strong>  
    5.     int result = 10 / y;  
    6.     NSLog(@"iOS APP 第一阶段开发完成了! 结果是:%ld", result);  
    7.    // End  
    8.   
    9.    NSLog(@"<strong>1.0 版本闪退bug 已修复, 程序出现除0异常</strong>");  
    10.   
    11.    NSLog(@"其他同事在主线trunk中进行新需求开发...");  
    12.    NSLog(@"其他同事在主线trunk中进行新需求开发...");  
    13. }  

     

    10. 此时合并彻底结束,branches目录下的源码如果不想要也可以删掉,接着修改bug的这位程序员需要切换工作空间到主线上来,使用Xcode重新打开trunk/MyAppProject项目,接着开发尚未完成的新功能。SVN目录如下:

             

    说明:

    1. 分支开发和主干开发是两个完全独立的过程,两者可以同时进行开发
    2. 因分支和主干开发是并行的,所以两者可以任意的多次提交当前工程所修改的文件

    转载于:https://www.cnblogs.com/yachao1120/p/9111851.html

    展开全文
  • 改代码后关联上次提交用 2.iSource 可以fork自己的远程仓库,提交时先push到自己fork,然后再合到库中 3.codeClub没用过,据说是三种代码管理工具最好用的 repo 第一次接触repo 开发智能手表项目时,有两个代码仓,...

    我用过的 vscode+git+isource+jenkins 摄像机项目
    vscode+git +gerrit+jenkind 智能手表

    这篇文章主要了解jenkins---------持续集成

    在这里插入图片描述

    Jenkins是什么

    Jenkins是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控外部任务的运行(这个比较抽象,暂且写上,不做解释)。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
    通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT,构建工具有Maven、Ant、Gradle。

    持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。

    Jenkins的功能
    Jenkins的主要功能是将项目中重复执行的工作自动化的执行。如软件的建造(构建)和在配置文件下设置的job。具体功能大概有:

    1.软件的持续构建和测试,Jenkins提供了一个系统,使开发人员可以很容易的将改变集成到工程中。自动化的,持续的构建有利于提高开发效率。
    2.监视job的执行,如下图所示,job可以实现很多的功能,Jenkins可以对这些项目进行显示,让用户更清楚的注意到这些 损毁的job。(具体情况后文中介绍)
    3.项目源代码修改的检测,jenkins能够从项目的Subversion/CVS生成最近修改的集合列表,且不会增加Subversion/CVS Repository的负载。
    4.分布式构建,Jenkins可以将工程构建到多台机器,更好地利用硬件资源,节省时间。
    其他,Jenkins代码开源,用户可以自己编写插件。所以jenkins可以实现很多的功能。
    Jenkins的原理

    关于原理,我了解的也不是特别的深刻,先附上师姐的一张图,以后研究深刻了再往这边补上
    在这里插入图片描述

    一、Jenkins的由来
    这篇关于jenkins的文章写的比较好

    目前持续集成(CI)已成为当前许多软件开发团队在整个软件开发生命周期内侧重于保证代码质量的常见做法。它是一种实践,旨在缓和和稳固软件的构建过程。并且能够帮助您的开发团队应对如下挑战:
    l 软件构建自动化 :配置完成后,CI系统会依照预先制定的时间表,或者针对某一特定事件,对目标软件进行构建。
    l 构建可持续的自动化检查 :CI系统能持续地获取新增或修改后签入的源代码,也就是说,当软件开发团队需要周期性的检查新增或修改后的代码时,CI系统会不断确认这些新代码是否破坏了原有软件的成功构建。这减少了开发者们在检查彼此相互依存的代码中变化情况需要花费的时间和精力(说直接一点也是钱啊,呵呵)。
    l 构建可持续的自动化测试 :构建检查的扩展部分,构建后执行预先制定的一套测试规则,完成后触发通知(Email,RSS等等)给相关的当事人。
    l 生成后后续过程的自动化 :当自动化检查和测试成功完成,软件构建的周期中可能也需要一些额外的任务,诸如生成文档、打包软件、部署构件到一个运行环境或者软件仓库。这样,构件才能更迅速地提供给用户使用。
    部署一个CI系统需要的最低要求是,一个可获取的源代码的仓库,一个包含构建脚本的项目。
    下图概括了CI系统的基本结构
    在这里插入图片描述
    该系统的各个组成部分是按如下顺序来发挥作用的:
    1.开发者检入代码到源代码仓库。
    2.CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
    3.CI系统会在对应的工作区内执行构建过程。
    4.(配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
    5.(配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
    6.CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。

    Jenkins就是这么一个CI系统。之前叫做Hudson。
    以下是使用Jenkins的一些理由:
    l 是所有CI产品中在安装和配置上最简单的。
    l 基于Web访问,用户界面非常友好、直观和灵活,在许多情况下,还提供了AJAX的即时反馈。
    l Jenkins是基于Java开发的(如果你是一个Java开发人员,这是非常有用的),但它不仅限于构建基于Java的软件。
    l Jenkins拥有大量的插件。这些插件极大的扩展了Jenkins的功能;它们都是开源的,而且它们可以直接通过web界面来进行安装与管理。

    git

    GIT,全称是分布式版本控制系统,git通常在编程中会用到,并且git支持分布式部署,可以有效、高速的处理从很小到非常大的项目版本管理。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆(git clone),在本地机器上拷贝一个完整的Git仓库。

    什么是Gerrit?

    Gerrit 是一个基于 web 的代码评审工具, 它基于 git 版本控制系统。Gerrit 旨在提供一个轻量级框架, 用于在代码入库之前对每个提交进行审阅。‎‎更改将上载到 Gerrit, 但实际上并不成为项目的一部分, 直到它们被审阅和接受。它是标准开源过程的一个简单工具来支持提交补丁程序, 然后由项目成员在应用到代码库之前进行评审。‎Gerrit 首先是一个临时区域, 在提交的代码成为代码库的一部分之前, 可以对其修改进行检查。

    1.Gerrit提交代码时,需要同事审核,不过则需要记录id,改代码后关联上次提交用
    2.iSource 可以fork自己的远程仓库,提交时先push到自己fork,然后再合到库中
    3.codeClub没用过,据说是三种代码管理工具最好用的

    repo

    第一次接触repo
    开发智能手表项目时,有两个代码仓,用repo的相关指令直接把两个仓代码复制到了本地PC。

    1. 概要

    repo是Android为了方便管理多个git库而开发的Python脚本。repo的出现,并非为了取代git,而是为了让Android开发者更为有效的利用git。
    Android源码包含数百个git库,仅仅是下载这么多git库就是一项繁重的任务,所以在下载源码时,Android就引入了repo。 Android官方推荐下载repo的方法是通过Linux curl命令,下载完后,为repo脚本添加可执行权限:
    $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
    $ chmod a+x ~/bin/repo
    由于国内Google访问受限,所以上述命令不一定能下载成功。其实,我们现在可以从很多第三方渠道找到repo脚本,只需要取下来,确保repo可以正确执行即可。

    1. 工作原理

    repo需要关注当前git库的数量、名称、路径等,有了这些基本信息,才能对这些git库进行操作。通过集中维护所有git库的清单,repo可以方便的从清单中获取git库的信息。 这份清单会随着版本演进升级而产生变化,同时也有一些本地的修改定制需求,所以,repo是通过一个git库来管理项目的清单文件的,这个git库名字叫manifests。
    当打开repo这个可执行的python脚本后,发现代码量并不大(不超过1000行),难道仅这一个脚本就完成了AOSP数百个git库的管理吗?并非如此。 repo是一系列脚本的集合,这些脚本也是通过git库来维护的,这个git库名字叫repo。
    在客户端使用repo初始化一个项目时,就会从远程把manifests和repo这两个git库拷贝到本地,但这对于Android开发人员来说,又是近乎无形的(一般通过文件管理器,是无法看到这两个git库的)。 repo将自动化的管理信息都隐藏根目录的.repo子目录中。

    展开全文
  • 1、在git上创建一个一个新的代码仓(new repositiory) 2、输入代码仓的名字,默认是开源(public),点击create 3、点击复制代码仓的url 4、接下来,在电脑上初始化代码仓。选择要初始化的所在...
    1、在git上创建一个一个新的代码仓(new repositiory)

    2、输入代码仓的名字,默认是开源(public),点击create

    3、点击复制代码仓的url

    4、接下来,在电脑上初始化代码仓。选择要初始化的所在路径,用git cmd/git bash进入该路径。此处我选择f盘下的test_repository文件夹。


    5、(git cmd为例)行命令进入该文件夹,执行 git init,则在此处创建了空的代码仓,此时在该目录下会生成一个隐藏的.git文件夹。

    6、执行 git remote add origin +url(刚刚复制的代码仓url)来 添加远程仓库。

    7、在test_reposity文件夹下新建一个test.txt,然后执行git add . (句号表示添加test_reposity下的所有文件)

    8、执行git commit 进行提交操作

    9、执行git push 操作,将代码同步到远程仓库。

    10、到此一个代码仓基本创建完成。可使用git log查看更新日志。



    11、而后也可以在github上添加远程仓库的说明文件,值得注意的是readme.md文件是html格式,换行可用</br>。



    Git 常用命令
    1) 远程仓库相关命令
    检出仓库:         git clone https://github.com/Husbin/test_repository.git
    查看远程仓库: git remote -v
    添加远程仓库: git remote add [name] [url]
    删除远程仓库: git remote rm [name]
    修改远程仓库: git remote set-url --push [name] [newUrl]
    拉取远程仓库: git pull [remoteName] [localBranchName]
    推送远程仓库: git push [remoteName] [localBranchName]

    *如果想把本地的某个分支test提交到远程仓库,并作为远程仓库的master分支,或者作为另外一个名叫test的分支,如下:
    git push origin test:master         // 提交本地test分支作为远程的master分支
    git push origin test:test              // 提交本地test分支作为远程的test分支

    Git 命令详解
    现在我们有了本地和远程的版本库,让我们来试着用用Git的基本命令:
    git pull: 从其他的版本库(既可以是远程的也可以是本地的)将代码更新到本地,例如:' git pull origin master '就是将origin这个版本库的代码更新到本地的master主枝,该功能类似于SVN的 update
    git add: 是将当前更改或者新增的文件加入到Git的索引中,加入到Git的索引中就表示记入了版本历史中,这也是提交之前所需要执行的一步,例如'git add app/model/user.rb'就会增加app/model/user.rb文件到Git的索引中,该功能类似于SVN的 add
    git rm: 从当前的工作空间中和索引中删除文件,例如' git rm app/model/user.rb ',该功能类似于SVN的 rm、del
    git commit: 提交当前工作空间的修改内容,类似于SVN的commit命令,例如' git commit -m story #3, add user model ',提交的时候必须用-m来输入一条提交信息,该功能类似于SVN的 commit
    git push: 将本地commit的代码更新到远程版本库中,例如' git push origin '就会将本地的代码更新到名为orgin的远程版本库中
    git log: 查看历史日志,该功能类似于SVN的 log
    git revert: 还原一个版本的修改,必须提供一个具体的Git版本号,例如' git revert bbaf6fb5060b4875b18ff9ff637ce118256d6f20 ',Git的版本号都是生成的一个哈希值
     
    上面的命令几乎都是每个版本控制工具所公有的,下面就开始尝试一下Git独有的一些命令:
    git branch: 对分支的增、删、查等操作,例如' git branch new_branch '会从当前的工作版本创建一个叫做new_branch的新分支,'git branch -D new_branch'就会强制删除叫做new_branch的分支,'git branch'就会列出本地所有的分支
    git checkout: Git的checkout有两个作用,其一是在不同的branch之间进行切换,例如' git checkout new_branch '就会切换到new_branch的分支上去;另一个功能是还原代码的作用,例如' git checkout app/model/user.rb '就会将user.rb文件从上一个已提交的版本中更新回来,未提交的内容全部会回滚
    git rebase: 用下面两幅图解释会比较清楚一些,rebase命令执行后,实际上是将分支点从C移到了G,这样分支也就具有了从C到G的功能
     

     
    git reset: 将当前的工作目录完全回滚到指定的版本号,假设如下图,我们有A-G五次提交的版本,其中C的版本号是 bbaf6fb5060b4875b18ff9ff637ce118256d6f20,我们执行了' git reset bbaf6fb5060b4875b18ff9ff637ce118256d6f20 '那么结果就只剩下了A-C三个提交的版本
     



    git stash: 将当前未提交的工作存入Git工作栈中,时机成熟的时候再应用回来,这里暂时提一下这个命令的用法,后面在技巧篇会重点讲解
    git config: 利用这个命令可以新增、更改Git的各种设置,例如' git config branch.master.remote origin '就将master的远程版本库设置为别名叫做origin版本库,后面在技巧篇会利用这个命令个性化设置你的Git,为你打造独一无二的 Git
    git tag: 可以将某个具体的版本打上一个标签,这样你就不需要记忆复杂的版本号哈希值了,例如你可以使用' git tag revert_version bbaf6fb5060b4875b18ff9ff637ce118256d6f20 '来标记这个被你还原的版本,那么以后你想查看该版本时,就可以使用 revert_version标签名,而不是哈希值了
    Git 之所以能够提供方便的本地分支等特性,是与它的文件存储机制有关的。Git存储版本控制信息时使用它自己定义的一套文件系统存储机制,在代码根目录下有一个.git文件夹,会有如下这样的目录结构:

     
    有几个比较重要的文件和目录需要解释一下:HEAD文件存放根节点的信息,其实目录结构就表示一个树型结构,Git采用这种树形结构来存储版本信息,那么HEAD就表示根;refs目录存储了你在当前版本控制目录下的各种不同引用(引用指的是你本地和远程所用到的各个树分支的信息),它有heads、remotes、stash、tags四个子目录,分别存储对不同的根、远程版本库、Git栈和标签的四种引用,你可以通过命令'git show-ref'更清晰地查看引用信息;logs目录根据不同的引用存储了日志信息。因此,Git只需要代码根目录下的这一个.git目录就可以记录完整的版本控制信息,而不是像SVN那样根目录和子目录下都有.svn目录。

    最近git还有svn都有接触,给我最直观的感受就是git比svn好用,虽然svn是可视化的。但是真的有时候伤不起,我用svn跟团做项目的时候,别的小伙伴commit但是我不知道,我没有update直接commit,这样会导致各种冲突还有乱码。git在这里就做得很好,它会提示你要先执行git pull(相当于svn的update操作)之后才能commit还有push,省了很多时间。
     
    展开全文
  • 进入目录执行(注意,这里需要确认一下自己的python版本号,如果python命令指的是python2,python3命令才是python3.x版本的化,下面的命令中python都替换为python3,这里因为环境中python命令进入的就是python3.9...
  • 数据仓库的数据体系严格、治理容易,业务规模越大,ROI 越高;数据湖的数据种类丰富,治理困难,业务规模越大,ROI 越低,但胜在灵活。现在,鱼和熊掌我都想要,应该怎么办?湖一体架构就在这...
  • 数据结构课程设计——源代码

    千次阅读 2016-12-28 16:05:37
    飞机订票系统源代码 问题及代码: /**************************************************** *版权所有(C)2016,孙丽玮 *文件名称:飞机订票系统 *文件标识:无 ...*当前版本:VC++6.0 ...
  • 同时,顺应云计算时代无服务器化的技术发展趋势,同时发布了四款当前云上专门数据分析工具的无服务器版本。成为了行业内全栈式无服务器数据分析的先行者。大数据分析的易用性再次提升,体验在云上操作数据举重若轻的...
  • if_hdim_init提供了对分析有用的结构定义,该结构返回HDIM_CAL(存储所有校准参数的结构),HDIM_PAR(存储有关成像参数的结构),HDIM_VIS(存储用于增强HDIM可视化的查找表的结构)数据集和掩码)和HDIM_CST(存储...
  • 作者:cmlchen,腾讯微信后台开发工程师最近某些代码大仓的思想风靡整个 DevOps 圈子,这里的所谓大仓指的并不是仓库的代码容量达到多少 G,而是一种指导思想——就一个公司的代码(如...
  • 保证old和new两个目录都在当前目录下,下面就可以使用diff命令了,不要使用绝对路径,而应该使用相对路径,至于原因,看到文章结尾你就清楚了: LC_ALL=C TZ=UTC0 diff -Naur old new > foo.patch 如果不在意...
  • gitlab项目管理流程 任何项目开始即创建对应项目仓库; issues应覆盖项目从原始需求->项目结题过程中各环节,记录问题、解决思路等;...无创建子团队权限的情况下,可以先新建团队和项目,并将科室代码管理人员添
  • 【颗粒归】(四)代码走查---开篇

    千次阅读 热门讨论 2016-05-22 15:37:48
    经历了ITOO5.0和组织部考核系统新旧两版代码的历练,前段时间也要过来考评和基础的代码晚上回家研究,着实通过看别人的代码可以扩展自己的眼界,也是由于在期间看到了一些“坏味道”,让我有了总结“代码走查”这样...
  • Qt 程序获取程序所在路径、用户目录路径、临时文件夹等特殊路径的方法经常我们的程序中需要访问一些特殊的路径,比如程序所在的路径、用户目录路径、临时文件夹等。在 Qt 中实现这几个功能所用的方法虽然都不难,...
  • 当在网上clone代码的时候会发现有一个隐藏的.git/文件夹,git会将整个数据库存放在这个目录的下方,而每一次commit都相当于插入了一个hashMap,而分支和tag信息存储相当于插入的是一个个的指针,组合起来就是一个key...
  • 为更好地阅读本文,需要简单了解背景,建议可以大致浏览下前文:安全检测在线编译器中的安全检测,目的是确定用户代码是否能够安全的运行,且不对运行环境产生危害。仍以一般场景和特殊场景(前文有说明)举例区分:...
  • 代码参数表:此类源表用于记录源系统中使用到的数据代码和参数; 4.数据文件的类型 数据文件大多数以1天为固定的周期从源系统加载到数据仓库。数据文件包含增量,全量以及待删除的增量。 增量数据文件:数据文件的...
  • 数栈在湖一体上的探索与实践

    千次阅读 2022-03-21 16:12:04
    数据处理一直是很多企业的头疼难题,数据仓库不兼容多种格式的数据存储,Hadoop数据处理又缺乏调优,导致资源浪费、小文件问题。数栈提出“湖一体”,点击查看数据处理新方案。
  • 码云操作:建立托管的远程代码仓注:oschina免费创建的项目个数为1000.1.打开浏览器,登录码云(oschina),点击个人主页的红色标记处,弹出选择下拉框2.在弹出的下拉选择框中点击“新建项目”3.点击“创建”,完成...
  • 进入本机的home目录 找到.bashrc文件 通过编辑器打开 后边追加 function git_branch { branch="`git branch 2>/dev/null | grep "^\*" | sed -e "s/^\*\ //"`" if [ "${branch}" != "" ];then if [ "${...
  • ①Git的结构即Git在本地仓库的结构。 ②本地库和远程库的交互方式。 方式一:团队内部协作: 方式二:跨团队协作: ③本地库初始化。 ll:列出所有目录下的内容。 ls -lA:列出目录下所有资源,...
  • Java工程结构也是比较重要的部分,由于最近在使用刚初始化的SpringBoot项目,所以本篇Blog重点讨论应用分层划分以及依赖处理和服务器部署参数相关,对项目全局有个整体认知,结合《阿里巴巴代码规范》的分层和自己的...
  • git 文件夹上库代码上库The main library, data, UI, docs and wiki, tests, legacy and third-party components … How do we keep track and maintain order within all of this? Organizing the files in your ...
  • MQL5: 通过反向持仓来平

    千次阅读 2019-11-11 16:40:57
    MT5: 通过反向持仓来平 EA交易中最常见的操作,下单和平。 在脚本程序中写。 首先要了解发送下单需要的函数OrderSend 同样,先放上官方给的函数参考链接 OrderSend ...然后通过代码来看如何去使用...
  • 这个飞机订票系统是本人大二上的数据结构课设,功能完善,界面相对美观,后期还可以增添更多的功能。实现了“增添改查”,排序,登录,购票,退票,导入文件,保存等功能。并且还做了一些优化,比如可以在系统的上方...
  • 5000 万行以上大型代码仓库工程实践

    千次阅读 2021-07-27 00:12:02
    作者:marinewu,腾讯 PCG 工程效能平台部专家腾讯 PCG 工程效能平台部自 2020 年开始进行大仓基本能力建设,并在 2021 年与工蜂合作成立了代码大仓研效联合项目组。在此...
  • 在线编译器代码在线编译器,即在线代码编写运行工具,提供给用户在线代码编辑、代码提示、代码诊断、编译、运行等一系列从代码编写到启动运行过程中必要的功能服务,以达到IDE的核心功能,应用范围较广,从使用场景...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,216
精华内容 1,286
关键字:

查看当前代码仓目录结构