关于git:git合并分支

如果咱们当初在dev分支上,刚开发完我的项目,执行了下列命令:git add .git commit -m '提交的备注信息'git push -u origin dev想将dev分支合并到master分支,操作如下:1、首先切换到master分支上git checkout master2、如果是多人开发的话 须要把近程master上的代码pull下来 git pull origin master//如果是本人一个开发就没有必要了,为了保险期间还是pull3、而后咱们把dev分支的代码合并到master上git merge dev4、而后查看状态及执行提交命令 git statusOn branch masterYour branch is ahead of 'origin/master' by 12 commits. (use "git push" to publish your local commits)nothing to commit, working tree clean//下面的意思就是你有12个commit,须要push到近程master上 > 最初执行上面提交命令git push origin master5其余命令 更新近程分支列表git remote update origin --prune查看所有分支git branch -a删除近程分支Chapater6git push origin --delete Chapater6删除本地分支 Chapater6git branch -d Chapater6

July 16, 2021 · 1 min · jiezi

关于git:git创建和切换分支

Git 分支 分支是什么概念? 假如一个大我的项目曾经上线,然而过了一段时间发现须要减少新性能,那么久不能再以后我的项目上间接开发,须要创立新分支,在分支上进行开发、调试等操作,实现后将其合并在master主分支下面。 如果没有应用分支,那么整个产品的迭代周期会因为新性能的开发而被缩短,更蹩脚的是,如果在开发的过程中,如果由用户反馈说你的我的项目有一个致命的bug,不得不放在手头的开发工作修复bug,费时费力,可能面临解体。 创立分支语法:git branch 分支名 然而此刻HEAD指针仍然指向主分支master 切换分支语法:git checkout 分支名 查看是否切换胜利 git log --decorate -- oneline 查看分支 git log --decorate --oneline //一行显示 git log --decorate --oneline --graph -all //图形化 创立并且切换到分支里git checkout -b 分支名 步骤1、切换至须要克隆的分支git checkout release2、拉取该分支最新的代码(当然,拉取之前最好本地的仓库环境是洁净的,该提交的提交,该stash的stash)git pull release3、基于release分支克隆出新的本地分支issue66git checkout -b issue664、将新建的本地分支issue66push到近程仓库git push origin issue66

July 16, 2021 · 1 min · jiezi

关于git:在R语言中拟合扩展的Rasch模型分析试题质量

原文链接:http://tecdat.cn/?p=23068 Rasch 剖析是取得主观的、最根本的累加型测量值(兼顾分析模型中的规范误和品质管制如拟合统计值)的一种分析方法,实用于通过随机观测有序、分级类反馈取得的数据分析。 Rasch 模型是如何解决数据的呢?在Rasch 模型,研究者应用概率预计的办法对某个具体问题的答复(答对/答错 )建模,提出了一个同时包含了人和问题参数的函数。最早的模型是把正确答案的概率用模型表白为一个logistic 函数,来考查人的参数和问题参数的不同之处。 要应用该模型,要满足一些条件: 数据类型应该是有序类数据,比方张三比李四个子高,李四比王五个子高,等等依此类推。不同于其余统计模型,Rasch 心愿能达到测量工具的恒定无效,不论在哪种环境下,和题目,和加入的人无关。也就是说它的指标是去取得适宜模型的数据。而不是仅仅用于形容某个数据集,也不是去依据模型和数据的拟合度去订正参数而后去承受或回绝参数。R语言扩大的Rasch模型对于Rasch的次要性能。 对Rasch进行剖析并生成对象 person.parameter(drmobj) 生成ppar类的对象。从dRm对象中绘制图表: plotPImap(), plotICC(), plotjointICC()从ppar对象中绘制图表:plot()从dRm对象中提取信息:coef(), vcov(), confint(), logLik(), model.matrix()从ppar对象中提取信息:confInt(), logLik()eRm对象的层次结构plotjointICC()只实用于dRm(二分法RM),对象 LRtest()实用于dRm和Rm对象,等等。 拟合RM> rm.res 默认为(datamatrix, sum0 = TRUE, 其余选项)。 sum0示意约束条件(用于预计性)。TRUE总和为零,FALSE第一项设置为0。 输入给出难度参数。 约束条件和设计矩阵> model.matrix > model.matrix(sum0 = FALSE))  > summary(rm.res)   提取信息我的项目的参数估计 > coef 我的项目参数估计值的方差-协方差矩阵 > vcov 我的项目参数估计的置信区间> confint 条件对数似然logLik 绘制ICCs> plot(res) 绘制繁多的ICC> plot( subset = 3) 绘制ICCs> plotICC(rm.res, item.subset = 1:4, ask = F, empICC = list("raw"),+ empCI = list(lty = "solid")) 绘制人-问题图> plotPImap(rm.res) 人参数估计 person.para 如果数据中存在NA,则对每个NA模式的组别预计不同的人的参数。 人参数估计办法的后果> logLik > confint    留神:confint(pp)给出了所有受试者的数值,如果数据中存在NA,则输入每个NA组的置信区间。 个参数估计图> plot(pp) 最受欢迎的见解 1.R语言多元Logistic逻辑回归 利用案例 2.面板平滑转移回归(PSTR)剖析案例实现 3.matlab中的偏最小二乘回归(PLSR)和主成分回归(PCR) 4.R语言泊松Poisson回归模型剖析案例 5.R语言回归中的Hosmer-Lemeshow拟合优度测验 6.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现 7.在R语言中实现Logistic逻辑回归 8.python用线性回归预测股票价格 9.R语言如何在生存剖析与Cox回归中计算IDI,NRI指标

July 15, 2021 · 1 min · jiezi

关于git:成功的Git分支模型

这个模型是在2010年构思进去的,而当初距今已有10多年的历史,而Git自身才诞生不久。在那10年中,git-flow(本文介绍的分支模型)在许多软件团队中十分风行,以至于人们开始将其视为某种规范,但可怜的是,它也被当作教条或灵丹妙药。 在那10年中,Git自身就席卷了整个世界,并且与Git一起开发的最风行的软件类型正在越来越多地转向Web应用程序-至多在我的过滤泡中。Web应用程序通常是间断交付的,不会回滚,并且您不用反对晚期运行的软件的多个版本。 这不是我十年前写博客时想到的那种软件。如果您的团队正在继续交付软件,我建议您采纳更简略的工作流程(例如GitHub flow),而不是尝试将git-flow引入您的团队。 然而,如果您正在构建显式版本的软件,或者如果您须要在晚期支持软件的多个版本,那么git-flow依然可能像适宜您团队的人一样适宜您的团队最近10年。在这种状况下,请持续浏览。 总而言之,请始终记住万灵药不存在。思考您本人的状况。别厌恶 本人决定。 在这篇文章中,我介绍了大概一年前为我的一些我的项目(在工作中和在私人我的项目中)引入的开发模型,事实证明该模型十分胜利。我始终想写一阵子,然而直到现在,我还没有真正找到彻底这样做的工夫。我不会议论任何我的项目的细节,而只会议论分支策略和公布治理。 去中心化但中心化咱们应用的并且与此分支模型配合良好的存储库设置是具备地方“实在”存储库的存储库设置。请留神,此 repo 仅 被视为 地方仓库(因为 Git 是 DVCS,因而在技术层面上没有地方仓库这样的货色)。咱们将此存储库称为origin,因为所有 Git 用户都相熟此名称。 每个开发人员pulls和pushes到名为origin的存储库。但除了中心化的推拉关系,每个开发者也可能会从其余同行那里fetch变动,造成子团队。 次要分支要害地是,开发模型受到现有模型的极大启发。地方仓库领有两个具备有限生命周期的次要分支: masterdevelop每个Git的使用者都应该相熟origin的master分支。与master分支平行,存在另一个分支,称为develop。 咱们认为origin/master是源代码HEAD始终反映生产就绪状态的次要分支 。 咱们认为origin/develop是主分支,其中的源代码 HEAD始终反映下一个版本最新交付的开发更改的状态。有些人将其称为“集成分支”。这是构建任何主动夜间构建的中央。 当develop分支中的源代码达到稳固点并筹备公布时,所有更改都应该合并到master 。 因而,每次将更改合并回 时master,依据定义,这是一个新的生产版本。咱们在这方面往往十分严格,因而实践上,咱们能够应用 Git 钩子脚本在每次提交 master。 反对分支在次要分支master和旁边develop,咱们的开发模型应用各种反对分支来帮忙团队成员之间的并行开发、轻松跟踪性能、筹备生产版本并帮忙疾速修复实时生产问题。与次要分支不同,这些分支的生命周期总是无限的,因为它们最终将被删除。 咱们可能应用的不同类型的分支是: Feature branchesRelease branchesHotfix branches这些分支中的每一个都有特定的目标,并且在哪些分支能够是它们的原始分支以及哪些分支必须是它们的合并指标方面受到严格的规定束缚。 从技术角度来看,这些分支绝不是“非凡的”。分支类型依据咱们如何应用它们进行分类。它们当然是一般的Git 分支。 Feature branches可能来自以下分支:develop必须合并到的分支:develop分支命名规定:除了 master, develop, release-, 或hotfix- 性能分支(或有时称为主题分支)用于为行将公布或边远的将来版本开发新性能。当开始开发性能时,此时可能不晓得将合并该性能的指标版本。性能分支的实质在于,只有该性能处于开发阶段,它就存在,但最终会被合并回develop(明确将新性能增加到行将公布的版本中)或抛弃(如果试验令人悲观)。 性能分支通常只存在于开发者仓库中,而不存在于origin. 创立feature branches当开始一个新个性的工作时,从这个develop分支创立一个新的分支。Git命令 $ git checkout -b myfeature developSwitched to a new branch "myfeature"将曾经开发的性能分支合并到develop分支中 能够将实现的featuren分支合并到develop分支中,以确保将它们增加到行将公布的版本中: $ git checkout developSwitched to branch 'develop'$ git merge --no-ff myfeatureUpdating ea1b82a..05e9557(Summary of changes)$ git branch -d myfeatureDeleted branch myfeature (was 05e9557).$ git push origin develop该--no-ff标记导致合并总是创立一个新的提交对象,即便合并能够用快进执行。这防止了失落无关性能分支的历史存在的信息,并将所有一起增加性能的提交组合在一起。两者比拟: ...

July 14, 2021 · 2 min · jiezi

关于git:5步删除git-submodule

1. 删除submodule缓存须要先暂存 .gitmodules 文件, 否则会报错: fatal: please stage your changes to .gitmodules or stash them to proceed git add .gitmodulesgit rm --cached submodule_name2. 删除submodule目录rm -rf submodule_name3. 批改.gitmodules移除对应的submodule信息, 只有1个submodule信息也能够删除该文件. 4. .git/modules移除对应的submodule目录 5. .git/config移除对应的submodule信息

July 13, 2021 · 1 min · jiezi

关于git:拓端tecdatR语言优化交易系统用平行坐标图可视化系统参数优化结果

原文链接:http://tecdat.cn/?p=23026在交互式平行坐标图中,有一个很好的htmlwidgets的例子。你能够交互式地操作平行坐标图来放大乏味的察看后果。 不久前,我读到了对于零碎参数优化后果的可视化,应用应用程序来创立和操作回测后果。这个想法是通过扭转零碎参数来运行多个回测,并应用平行坐标图显示后果。 在如何优化交易系统中形容了一个零碎参数优化的好例子。如果你只优化两个参数,三维图是一个十分好的办法,但如果你有两个以上的参数,该怎么做? 平行坐标就来了。假如咱们运行一个零碎参数优化,扭转了3个参数,并将后果存储在数据矩阵中。第一列将蕴含CAGR,第2:4列将蕴含参数值。 比如说。 #*****************************************************************#加载历史数据getSymbols(tickers, src = 'yahoo', from = '1970-01-01', env = data, auto.assign = T)# 只抉择快 < 中 < 慢choices = choices\[choices$fast < choices$mid & choices$mid < choices$slow,\]# 事后计算所有的挪动平均线mas = list()for( i in unique(unlist(choices)) ) mas\[\[i\]\] = bt.apply.matrix(prices, SMA, i)# 对所有组合进行回测result = choicesfor(i in 1:nrow(choices)) { data$weight\[\] = NA result$CAGR\[i\] = compute.cagr(model$equity, nyears)#*****************************************************************# 平行坐标图#*****************************************************************coord(result, col=1:nrow(result)) 这张图很难看懂。 现实状况下,你想抉择一个参数范畴,并查看相应的零碎CAGRs,或者抉择一个CAGRs范畴,看看什么参数产生了它们。R软件能够可视化互动性。 # 交互式平行坐标图cp(result) 另一种办法是实现这种交互式行为,就是应用交互式平行坐标中的htmlwidgets的一个平凡的例子。  最受欢迎的见解 1.R语言动态图可视化:如何、创立具备精美动画的图 2.R语言生存剖析可视化剖析 3.Python数据可视化-seaborn Iris鸢尾花数据 4.r语言对布丰投针(蒲丰投针)试验进行模仿和动静 5.R语言生存剖析数据分析可视化案例 6.r语言数据可视化剖析案例:摸索brfss数据数据分析 7.R语言动静可视化:制作历史寰球平均温度的累积动静折线图动画gif视频图 8.R语言高维数据的主成分pca、 t-SNE算法降维与可视化剖析案例报告 9.python主题LDA建模和t-SNE可视化

July 9, 2021 · 1 min · jiezi

关于git:解讲Writing-Black-Box

2021/7/6 HW1: Writing Black Box Tests 1/6 HW1: Writing Black Box TestsDue Tuesday by 11:59pm Points 15MotivationThis week we took an in depth look at our first testing technique: black box testing. Oneof the key elements of black box testing is that the tester does not have access to the source. Inthis assignment, you will be given a specification and list of requirements. This will give youexperience writing unit tests in a black box testing scenario.Course Learning Outcome(s):Apply testing techniques, including black-box and white-box techniques, automatic testingactivities, and regression testing (CLO 4)Module Learning Outcome(s):Apply black box testing techniquesDescriptionFor this assignment, you will be writing unit tests based on the followingspecifications/requirements.You will write a series of unit tests to test a function called credit_card_validator (written for you)that is passed a sequence of digits as a string that represents a credit card number. This functionwill return True if it is a valid credit card number, otherwise, it will return False .Depending on the credit card issuer, the length of a credit card number can range between 10 and19 digits. The first few digits of the number are the issuer prefix. Each credit card issuer has anassigned range of numbers. For example, only Visa credit card numbers may begin with 4 , whileAmerican Express card numbers must begin with either a 34 or 37 . Sometimes, credit cardproviders are assigned multiple ranges. For example, MasterCard card numbers must start with thenumbers between 51 through 55 or 2221 through 2720 (inclusive).The last digit of the number is referred to as the check digit and acts as a checksum. Most creditcards calculate this check digit using the Luhn algorithm (see resources below for how this iscalculated).In order to limit the scope of this assignment, we are going to limit the number of credit card issuersto 3: Visa, MasterCard, and American Express. Each has its own prefixes and length requirements.VisaPrefix(es): 4?2021/7/6 HW1: Writing Black Box Tests 2/6Length: 16MasterCardPrefix(es): 51 through 55 and 2221 through 2720Length: 16American ExpressPrefix(es): 34 and 37Length: 15Your task is to create a series of tests that attempt to reveal bugs in the implementation. As this isblack box testing, you will not have access to the source so you must use what you have learnedthis week to generate test cases.You will be submitting your code to Gradescope which will auto grade your tests. In order to get fullcredit on the assignment, you will need to locate all 6 bugs in the code (refer to the rubric for fulldetails). Some are easier than others. Bug 5 is easy to miss without using Partition Testing and Bug6 requires using what you know about common errors to design your tests.You are free to determine how you generate your test cases. You may do it completely manually, oruse an automated tool like the TSLgenerator. No matter how you generate your test cases, in yourfile testing file ( tests.py ), you need to include a comment for each test case describing:What the test case (i.e. credit card number) is meant to verifyHow you determined what to use as the test caseHere is an example: ...

July 9, 2021 · 6 min · jiezi

关于git:git命令使用总结

1. git介绍git 是一个开源的分布式版本控制系统,用于麻利高效地解决任何或小或大的我的项目。咱们在开发和治理过程中,是应用特地频繁的一个工具。1.1但咱们应用git的个别工作流程如下: 克隆 Git 资源作为工作目录。 在克隆的资源上增加或批改文件。 如果其他人批改了,你能够更新资源。 在提交前查看批改。 提交批改。 在批改实现后,如果发现错误,能够撤回提交并再次批改并提交1.2另一种开发模式,相似于 github 的开发模式:创立一个主仓库每个人开发者fork一份开发库开发者在本人fork出的代码里做开发开发完后 pull request ,期待code review 审核合并代码如果主仓库有更新,先fetch,而后合并到本人的仓库里2. 根本应用在应用过程中遇到遗记的操作命令,多应用-h 进行查看2.1操作近程仓库:origin 是默认的指向近程代码库的名称,能够更改; 也能够通过增加新的指向来指定到多个近程代码库git remote show origin 查看地方仓库信息git remote 能够列出以后的仓库名称git remote -v 列出以后仓库列表git remote rm origin 删除近程仓库git remote add origin xxx.git 增加近程仓库git branch developgit push -u origin develop也能够克隆近程仓库git clone xxxx.git创立一个近程devlop分支的跟踪分支git checkout -b develop origin/developgit remote prune origin 删除本地的曾经在远端不存在的分支2.2 拉取命令git fetch:相当于是从近程获取最新版本到本地,不会主动mergegit fetch --all 拉取近程所有的分支git pull:相当于是从近程获取最新版本并merge到本地git push :提交git push -f -u origin master //强制提交,须要确保master没有被锁定git checkout -f branchname 强制笼罩本地文件呈现have diverged的状况下,解决形式:git fetch origingit reset --hard origin/test2.3 开发残缺命令流程git status 查看状态git add . 增加所有git commit -a -m "形容"git push 分支提交合并到主分支git pull origin develop 合并性能前确保develop分支是最新的 git fetch --allgit checkout developgit merge some-feature 合并git pushgit branch -d some-feature 删除性能分支 2.4 分支操作开发分支操作git branch -d **** 删除本地分支git branch -a 查看近程分支git branch 查看本地分支git branch test 本地创立分支git push origin test 把分支推到近程git push origin :br-1.0.0 删除近程版本2.5 文件比对把握git diff命令的重点在于,明确Git文件的四种状态,以及文件的所在区域。文件所在的区域有三个:工作区、暂存区、仓库。 文件的流转方向是由工作区创立,add进入暂存区,commit进入仓库。对于曾经批改的文件,你可能想查看具体批改了哪些内容。能够用 git diff 命令git diff 他能够用于比拟当初 工作区(未提交到暂存区)与 暂存区(曾经通过 git add 和 git commit 提交了)。具体的批改变动。git diff的比拟是从右向左。git diff 比拟暂存区与工作区文件的区别。git diff --cached 比拟仓库与暂存区文件的区别。查看某次提交的文件批改的内容git show 某次提交的哈希值 文件名3. git 回退和撤销3.1 git回滚多人合作开发时,如果git 合并不当很容易呈现代码抵触、笼罩他人代码的问题:提交程序:提交前先add 而后commit,而后再git pull--> 解决合并 --> 解决了合并之后,再commit --> 而后再push git fetch --all 并不会把更新的货色在以后展示,git log也看不到,只有执行了 git pull 之后git log能力看到其他人的更改git log 查看日志copy 曾经commit的回退到指定commit_id:git reset --hard commit_id git push origin HEAD --forcegit rebase —abort 回退到合并前撤销本地所有批改:git reset --hard hash 或者git checkout <sha1-of-a-commit 历史版本>git reset --hard HASH #返回到某个节点,不保留批改。git reset --soft HASH #返回到某个节点。保留批改git rebase —abort 回退到合并前git checkout . #本地所有批改的。没有的提交的,都返回到原来的状态git stash #把所有没有提交的批改暂存到stash外面。可用git stash apply复原。3.2撤销文件等//撤销所有的曾经add的文件git reset HEAD . // 撤销某个文件或文件夹:git reset HEAD -filename// 撤销对所有已批改但未提交的文件的批改,但不包含新增的文件git checkout . // 撤销对指定文件的批改,[filename]为文件名 git checkout [filename] 4.打tag相干:给master打标签git tag -a 0.1 -m "Initial public release" mastergit push --tags 或者 git push origin 0.1// 删除本地标签:git tag -d 标签名git push origin :refs/tags/标签名5.git遴选 git cherry-pick 命令的作用,就是将指定的提交(commit)利用于其余分支 git cherry-pick <commitHash> # 能够是多个 能够通过git log 查看对应的commitid 操作步骤: 在你提交的分支上developer git log 失去须要合并的提交id 例如是f # 切换到 master 分支 git checkout master git cherry-pick f6. git merge和git rebase的区别Merge命令会保留所有commit的历史工夫。每个人对代码的提交是各式各样的。只管这些工夫对于程序自身并没有任何意义。然而merge的命令初衷就是为了保留这些工夫不被批改。这样也就造成了以merge工夫为基准的网状历史构造。每个分支上都会持续保留各自的代码记录, 主分支上只保留merge的历史记录。子分支随时都有可能被删除。子分子删除当前,你可能看到的记录也就是,merge某branch到某branch上了。这个历史记录形容基本上是没有意义的。rebase, 这个命令会始终把你最新的批改放到最前头。比方你对主branch进行rebase当前, 你的所有批改就会在主branch以后所有的批改之前。你会更有信念保障你的代码运行畅通无阻。通过你本人的测试当前, 你就能够释怀的把代码合并到主的branch外面了。

July 9, 2021 · 2 min · jiezi

关于git:git-建立本地分支-修改完成后-合并master提交

建设本地分支应用git branch命令能够查看到,当前目录下只有一个master分支应用git branch 分支名称 创立分支,创立实现后通过git branch能够看到本地曾经多出了一个新建的分支3.应用git checkout分支名称 切换到本地分支开始开发 如 git checkout test合并分支到master1.完结代码编写后,首先查看状态,会发现发现都是红色,示意在当前工作区中git status 2.把以后分支工作区内容增加到暂存区git add .3.再次查看状态,看到变绿色了,示意曾经全副增加到暂存区了git status 4.把暂存区内容提交到本地仓库git commit -m "此次提交的信息备注" 5.查看以后分支git branch——能够看到以后分支为login 6.此时咱们须要切换到主分支里,mastergit checkout master 7.合并login分支到master主分支中git merge login 8.最初再将主分支master上传到近程mastergit push origin master 后续如果不想将新建分支test与主分支master合并,而是想将新建分支上的文件上传到近程对应的分支上,那么操作如下。首先应该在近程GitHub上建设与本地对应的分支。如我本地新建的分支为test,那么我在近程GitHub上新建的分支也应该为test,操作为: 1、关上Git工具,进入到本地仓库,如我的是myProject,因为默认为主分支master,所以先要切换分支到test上,操作: git checkout test 2、在近程GitHub上新建分支test与本地对应,操作: git push --set-upstream origin test 3、如我当初在本地test分支上新建一个test.txt文件,文件内容为”hello world!” 操作为: echo "Hello world!" >test.txt 4、将新建文件增加到缓存区。操作为: git add . 5、将缓存区内容增加到本地仓库,操作为: git commit -m "测试分支" 6、将本地分支test的内容提交到近程GitHub上,操作为: git push origin test ...

July 8, 2021 · 1 min · jiezi

关于git:整体迁移git

本文一个git操作,将一个repo整体搬迁到另一个新建的repo中,包含其中的branch/tag:. git_test1: github.com:xiangbin1997/git_test1.git. git_test2: github.com:xiangbin1997/git_test2.git 用git_test1替换 git_test2 bare 模式clone git_test1 [postgres@hgcndn git_test1_full]$ git clone --bare git@github.com:xiangbin1997/git_test1.git git_test1Cloning into bare repository 'git_test1'...remote: Enumerating objects: 19, done.remote: Counting objects: 100% (19/19), done.remote: Compressing objects: 100% (15/15), done.Receiving objects: 100% (19/19), done.Resolving deltas: 100% (2/2), done.remote: Total 19 (delta 2), reused 13 (delta 0), pack-reused 0[postgres@hgcndn git_test1_full]$ cd git_test1/[postgres@hgcndn git_test1]$ lltotal 16drwxrwxr-x 2 postgres postgres 6 Jul 8 02:48 branches-rw-rw-r-- 1 postgres postgres 133 Jul 8 02:48 config-rw-rw-r-- 1 postgres postgres 73 Jul 8 02:48 description-rw-rw-r-- 1 postgres postgres 21 Jul 8 02:48 HEADdrwxrwxr-x 2 postgres postgres 242 Jul 8 02:48 hooksdrwxrwxr-x 2 postgres postgres 21 Jul 8 02:48 infodrwxrwxr-x 4 postgres postgres 30 Jul 8 02:48 objects-rw-rw-r-- 1 postgres postgres 210 Jul 8 02:48 packed-refsdrwxrwxr-x 4 postgres postgres 31 Jul 8 02:48 refs减少remote2 ...

July 8, 2021 · 1 min · jiezi

关于git:常用Git操作记录未完待续

创立本地分支git branch 分支名 切换到本地分支git checkout 分支名 创立本地分支并切换git checkout -b 分支名 提交本地分支到近程仓库git push origin 本地分支名git push --set-upstream origin 分支名 新建本地分支与近程分支关联git branch –set-upstream 本地新建分支名 origin/近程分支名 复制指定分支git clone -b 分支名 仓库地址 删除近程分支git push origin --delete 分支名 删除本地分支git branch -d 分支名 代码回退git refloggit reset --hard 想要回退的版本号

July 7, 2021 · 1 min · jiezi

关于git:使用docker搭建最新版本的gitea并配置HTTPS访问

应用docker搭建最新版本的gitea,并配置HTTPS拜访博客阐明 文章所波及的材料来自互联网整顿和集体总结,意在于集体学习和教训汇总,如有什么中央侵权,请分割自己删除,谢谢!简介之前有搭建过gitlab,不过配置要求高,而且应用docker搭建之后各种问题,所以还是应用轻一点的git服务器,也够用了。 官网gitea docker拉取镜像默认会拉取最新的版本,须要其余版本能够去https://hub.docker.com查找 docker pull gitea/gitea 运行镜像运行的时候留神一些参数的配置 参数--privileged=true 应用该参数,container内的root领有真正的root权限 --restart=always 主动重启容器 -p 端口映射(宿主机端口:容器端口) -v 容器卷挂载 (宿主机目录 :容器目录) 命令docker run -d --privileged=true --restart=always --name=gitea -p 20022:22 -p 20080:3000 -v /var/lib/gitea:/data gitea/gitea:latest 运行此时关上ip加上:20080,就能够拜访了 开始配置gitea,依照一下配置 配置一下管理员账号和明码,登录就能够应用了 新建仓库新建一个仓库,发现http的clone地址是IP地址 配置HTTPS能够在云服务器的域名解析那里,增加一个gitea的子域名,在宝塔面板外面配置好https,用作可拜访的https域名。 批改配置文件,把域名相干的信息配置到gitea,依据之前的docker run配置的门路,找到配置文件/var/lib/gitea/gitea/conf/app.ini ROOT_URL = http://localhost:20080/改为ROOT_URL = 筹备好的https域名改完之后重新启动gitea docker restart gitea 这时候曾经配置好了 配置nginx,退出以下代码到nginx配置文件外面 location / { proxy_pass http://localhost:10080;}重启nginx,输出域名就能够拜访了 感激 万能的网络 以及勤奋的本人,集体博客,GitHub

July 5, 2021 · 1 min · jiezi

关于git:在Git项目中使用husky统一管理hooks

通过摸索能够学得更多,而不是指令。 We learn best by discovery, not instruction. -- 《程序员的思维修炼 | 开发认知潜能的九堂课》 写在后面最近总想尽快调研完husky的我的项目,而后尽快确定我的项目中能够集成的git-hook管理工具。之前曾经探索了pre-commit,再看完这个我的项目,就能够确定计划了。 装置 & 卸载执行环境node -v# v16.4.0npm -v# 7.18.1git --version# git version 2.24.3 (Apple Git-128)装置装置huskynpm install -D husky# + husky@6.0.0在我的项目中装置huskynpx husky install执行之后能够再package.json的devDependencies看到husky的配置。并在根目录减少一个.husky/的目录。(之后会解说.husky/_/husky.sh) .husky├── .gitignore # 疏忽 _ 目录└── _ └── husky.sh查看.git/config,能够看到配置中批改了core.hooksPath指向为.husky。这就是husky 6.0.0的实现原理:替换.git/hooks的目录为自定义目录,且该目录会提交到近程仓库。 $ cat .git/config[core] ... hooksPath = .husky在晓得能够批改core.hooksPath之前,我都是间接创立换一个软连贯来实现该成果的rm .git/hooks && ln -s .husky .git/hooks。 增加husky install到package.json scripts中#(npm 7.x中才无效)npm set-script prepare "husky install"执行之后会在package.json的script中会减少一个prepare。 卸载npm uninstall husky6.0.0版本做了很大的批改,且和之前的版本不再兼容。次要应用到了2016年git提供的新个性 core.hooksPath,容许用户指定本人的githooks目录。官网在Why husky has dropped conventional JS config给出了如下的阐明。示意尽管能够间接批改core.hooksPath的指定门路将hooks放到仓库中,但husky提供了更多便捷的性能。 ...

July 4, 2021 · 2 min · jiezi

关于git:在Git项目中使用precommit统一管理hooks

Unix 哲学 提供”尖锐“的小工具、其中每一把都意在把一件事件做好。 --《程序员修炼之道 - 从小工到专家》 写在后面如果你应用Git,那你肯定懂得纯文本的魅力并青睐上shell这样的脚本语言。 在很多时候,我更喜爱可能通过脚本语言进行配置的工具,而不是间接装置到编辑器的工具。一是因为脚本能够放在我的项目中与更多的人共享,以放弃标准始终;二是脚本主动触发的操作无须要记更多的快捷键或者点击一点鼠标;再来则是脚本语言能够做更多灵便的操作,而不受软件开发者的束缚。这大略也是我始终喜爱用Git指令,而不是编译器提供给我的Git工具。 本文将持续解说git hooks,介绍一款可能帮忙咱们更好地治理和利用git hooks的工具。冀望找到的工具有如下的性能: 只须要提供配置文件,主动从地方hooks仓库获取脚本 如果有多个我的项目,就不须要再每个我的项目都拷贝一份hooks了能够定义本地脚本仓库,容许开发人员自定义脚本,且无需批改配置文件 开发人员会有一些脚本以实现的自定义操作无需批改配置文件是指能够间接指向一个目录,并执行外面的所有hooks或者指定一个无需上传到git的本地配置文件每个阶段容许定义多个脚本 多个脚本能够使得性能划分而无需整合到一个臃肿的文件中脚本反对多种语言pre-commit 概要不要被这个pre-commit的名字蛊惑,这个工具不仅仅能够在pre-commit阶段执行,其实能够在git-hooks的任意阶段,设置自定义阶段执行,见的stages配置的解说。(这个名字大略是因为他们开始只做了pre-commit阶段的,后续才拓展了其余的阶段)。 装置pre-commit在零碎中装置pre-commit brew install pre-commit# 或者pip install pre-commit# 查看版本pre-commit --version# pre-commit 2.12.1 <- 这是我以后应用的版本在我的项目中装置pre-commit cd <git-repo>pre-commit install# 卸载pre-commit uninstall依照操作将会在我的项目的.git/hooks下生成一个pre-commit文件(笼罩原pre-commit文件),该hook会依据我的项目根目录下的.pre-commit-config.yaml 执行工作。如果vim .git/hooks/pre-commit能够看到代码的实现,根本逻辑是利用pre-commit文件去拓展更多的pre-commit,这个和我上一篇文章的逻辑是相似的。 装置/卸载其余阶段的hook。 pre-commit installpre-commit uninstall-t {pre-commit,pre-merge-commit,pre-push,prepare-commit-msg,commit-msg,post-checkout,post-commit,post-merge}--hook-type {pre-commit,pre-merge-commit,pre-push,prepare-commit-msg,commit-msg,post-checkout,post-commit,post-merge}# 如 pre-commit install --hook-type prepare-commit-msg罕用指令 # 手动对所有的文件执行hooks,新增hook的时候能够执行,使得代码均符合规范。间接执行该指令则无需等到pre-commit阶段再触发hookspre-commit run --all-files# 执行特定hookspre-commit run <hook_id># 将所有的hook更新到最新的版本/tagpre-commit autoupdate# 指定更新repopre-commit autoupdate --repo https://github.com/DoneSpeak/gromithooks更多指令及指令参数请间接拜访pre-commit官方网站。 增加第三方hookscd <git-repo>pre-commit installtouch .pre-commit-config.yaml如下为一个根本的配置样例。 .pre-commit-config.yaml # 该config文件为该项目标pre-commit的配置文件,用于指定该我的项目能够执行的git hooks# 这是pre-commit的全局配置之一fail_fast: falserepos:# hook所在的仓库- repo: https://github.com/pre-commit/pre-commit-hooks # 仓库的版本,能够间接用tag或者分支,但分支是容易发生变化的 # 如果应用分支,则会在第一次装置之后不自动更新 # 通过 `pre-commit autoupdate`指令能够将tag更新到默认分支的最新tag rev: v4.0.1 # 仓库中的hook id hooks: # 定义的hook脚本,在repo的.pre-commit-hooks.yaml中定义 - id: check-added-large-files # 移除尾部空格符 - id: trailing-whitespace # 传入参数,不解决makedown args: [--markdown-linebreak-ext=md] # 查看是否含有合并抵触符号 - id: check-merge-conflict- repo: https://github.com/macisamuele/language-formatters-pre-commit-hooks rev: v2.0.0 hooks: - id: pretty-format-yaml # https://github.com/macisamuele/language-formatters-pre-commit-hooks/blob/v2.0.0/language_formatters_pre_commit_hooks/pretty_format_yaml.py # hook脚本须要的参数,能够在该hook脚本文件中看到 args: [--autofix, --indent, '2']在run之后,pre-commit会下载指定仓库代码,并装置配置所须要的运行环境。配置实现之后能够通过pre-commit run --all-files运行一下增加的hooks。下表为.pre-commit-hooks.yaml可选配置项。 ...

July 4, 2021 · 7 min · jiezi

关于git:定义全局Git-Hooks和自定义Git-Hooks

提醒 21 Use the Power of Command Shells 利用命令shell的力量 --《程序员修炼之道 - 从小工到专家》 写在后面一个git我的项目只有一个hooks目录,每个阶段hook文件也只有一个,这样会造成开发人员和公司全局hooks的配置抵触。为了实现全局Git Hooks和开发人员自定义Hooks,特写了该繁难我的项目。 全局Hooks和自定义Hooks我的项目构造├── Makefile # make 装置指令├── global #保留全局的hooks│ ├── applypatch-msg.sample│ ├── commit-msg.sample│ ├── fsmonitor-watchman.sample│ ├── post-update.sample│ ├── pre-applypatch.sample│ ├── pre-commit.sample│ ├── pre-merge-commit.sample│ ├── pre-push.sample│ ├── pre-rebase.sample│ ├── pre-receive.sample│ ├── prepare-commit-msg.sample│ └── update.sample├── customized # 开发人员自定义hooks目录├── applypatch-msg├── commit-msg├── fsmonitor-watchman├── hook-exec # hook 执行外围├── post-update├── pre-applypatch├── pre-commit├── pre-merge-commit├── pre-push├── pre-rebase├── pre-receive├── prepare-commit-msg└── update外围文件 hook-exec该文件负责将global/<hook>和customized/<hook>绑定到一个<hook>。如果想进行更多目录的拓展,更多同阶段hooks的拓展,能够对该文件进行批改。 hook-exec #!/bin/bashHOOK_DIR=$(dirname "$0")GLOBAL_HOOK="$HOOK_DIR/global/$HOOK_NAME"CUSTOM_HOOK="$HOOK_DIR/customized/$HOOK_NAME"if [ -f "$GLOBAL_HOOK" ]; then source $GLOBAL_HOOKfiif [ -f "$CUSTOM_HOOK" ]; then source $CUSTOM_HOOKfigit hook执行文件根目录下的hook文件都是一样的,目标是为了将hook的文件名HOOK_NAME以及所有参数$@都传入到hook-exec中,从而实现全局和自定义hook的调用,并确保本来的参数能够失常应用。 ...

July 4, 2021 · 1 min · jiezi

关于git:通过Git-Hook关联Tapd和Commit

提醒 61Don't Use Manual Procedures.不要应用手工流程 --《程序员修炼之道 - 从小工到专家》 前言Tapd提供了Gitlab代码关联的性能,咱们能够利用这个性能将代码的提交和Tapd中的需要进行关联。 能够通过如下的commit message将commit与tapd的story/bug/task进行关联。 # 关联需要--story=[story id] --user=[username in tapd]# 关联工作--task=[task id] --user=[username in tapd]# 关联缺点--bug=[bug id] --user=[username in tapd]比方 git commit -m "add tapd description to README.md --story=1000011" --user="Donespeak"要输出的内容十分的多,如果每次输出commit message的时候都须要做这部分工作,那么太浪费时间了。可能自动化的都自动化。 依据分支名/commit信息关联Tapdcommit-msg#!/bin/bash# 该脚本会依据分支名称,主动增加绑定tapd需要的信息# 须要提供环境变量 TAPD_USERNAME 以填充user信息# 分支名 | 绑定TAPD# --- | ---# tapd-S1234 | story 1234# tapd-B1234 | bug 1234# tapd-T1234 | task 1234COMMIT_MSG_FILE=$1BRANCH_PREFIX="tapd-"BRANCH_REX="$BRANCH_PREFIX[STB]{1}[0-9]+(-.*)?"TAPD_REFER_REX="--(story|task|bug)=[0-9]+[ ]+--user="TAPD_REFER_MSG_REX=".*$TAPD_REFER_REX.*"findTypeIdFromBranch() { local BRANCH=$(git branch | grep '*' | sed 's/* //') if [[ ! "$BRANCH" =~ $BRANCH_REX ]]; then return 1 fi local TYPE_ID=$($BRANCH#$BRANCH_PREFIX | grep -Eo '^[SBT]{1}[0-9]+') findTypeId $TYPE_ID}findTypeIdFromMsg() { local MSG=$1 local TYPE_ID=$(echo $MSG | grep -Eo "^#[SBT]{1}[0-9]+" | tr -d '#') echo $TYPE_ID if [ -z $TYPE_ID ]; then return 1 fi findTypeId $TYPE_ID}findTypeId() { local TYPE_ID=$1 if [ ${#TYPE_ID} -lt 1 ]; then return 1 fi TYPE_CHAR=$(echo ${TYPE_ID: 0: 1}) ID=$(echo ${TYPE_ID: 1}) case "$TYPE_CHAR" in S) TYPE="story" ;; T) TYPE="task" ;; B) TYPE="bug" ;; *) return 1 ;; esac}ORIGIN_COMMIT_MSG=$(cat $COMMIT_MSG_FILE)COMMIT_MSG=$ORIGIN_COMMIT_MSG# --- 如果曾经增加关联,则不做解决 ---if [[ $COMMIT_MSG =~ $TAPD_REFER_MSG_REX ]]; then exit 0fifindTypeIdFromMsg $COMMIT_MSGFAIL=$?if [ $FAIL -eq 1 ]; then findTypeIdFromBranch FAIL=$?fiif [ $FAIL -eq 1 ]; then echo "WARN: The format of branch name and commit message is incorrect." echo "The format of branch should be ${BRANCH_PREFIX}[STB]<tapdId> (example: ${BRANCH_PREFIX}S12345);" echo "Or the commit message should start with #[STB]<tapdId> (example: #S12345, message)." # 格局不合乎,停止提交 exit 0fi# --- 判断必要环境变量 ---if [ -z $TAPD_USERNAME ]; then echo "WARN: environment value TAPD_USERNAME is required." echo "You can config with the following commands. (Replace [yourname] with your name in Tapd. Using .zshrc instead of .bash_profile if zsh)" printf "\n\t%s\n\t%s\n\n" "echo -e '\nexport TAPD_USERNAME=\"[yourname]\"' >> ~/.bash_profile" "source ~/.bash_profile" exit 0fi# --- 减少TAPD关联 ---echo "$COMMIT_MSG" > "$COMMIT_MSG_FILE"echo -e "\n\n--$TYPE=$ID --user=$TAPD_USERNAME" >> "$COMMIT_MSG_FILE"环境变量配置如下命令只有执行一次。 ...

July 4, 2021 · 3 min · jiezi

关于git:Ubuntu-安装git

环境 Linux/Ubuntu20.04LTSgit version 2.25.1流程 关上终端,开始装置lauiji@lauiji-IdeaPad-15sIML-2020:~$ sudo apt install git正在读取软件包列表... 实现正在剖析软件包的依赖关系树 正在读取状态信息... 实现 将会同时装置下列软件: git-man liberror-perl倡议装置: git-daemon-run | git-daemon-sysvinit git-doc git-el git-email git-gui gitk实现装置后,查看装置的版本lauiji@lauiji-IdeaPad-15sIML-2020:~$ git --versiongit version 2.25.1这时就装置实现了! 【遇上旱季,吃定彩虹】 --Layuji

July 4, 2021 · 1 min · jiezi

关于git:我是怎么写-Git-Commit-message-的

作用编写格式化的 commit message 可能大大提高代码的保护效率。 比方: 能够提供更多的历史信息,不便疾速浏览;能够过滤某些 commit(比方文档改变),便于疾速查找信息;能够间接从 commit 生成 Change log;用的什么标准?<type>(<scope>): <subject>// 空一行<body>// 空一行<footer>其中,Header 是必须的,Body 和 Footer 能够省略。 typetype 用于阐明 commit 的类别。 feature A new featurefix A bug fixdocs Documentation only changesstyle Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)refactor A code change that neither fixes a bug nor adds a featureperf A code change that improves performancetest Adding missing tests or correcting existing testsbuild Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)ci Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)chore Other changes that don't modify src or test filesrevert Reverts a previous commitscopescope 用于阐明 commit 影响的范畴,比方数据层、管制层、视图层、具体模块等等,视我的项目不同而不同。 ...

July 3, 2021 · 1 min · jiezi

关于git:请收下这份-Git-扫盲手册

大家好,我是小七前言Git是程序员写我的项目必备的一个工具,工欲善其事必先利其器,显然这把武器对于我来时只是施展了它最简略的性能,这不,前两天我就在分支上合错代码了,尽管共事没说什么,然而这还是很不应该犯的错,于是我决定对Git做一个较为具体的学习和总结。 Git介绍Git是一个开源的分布式版本控制系统,能够无效、高速的治理从很小到十分大的我的项目版本治理。它不须要网络的反对,现已成为很多开发人员对我的项目版本治理的首选,也能够用来治理本人的一般文档版本。 Git的命令很多,在日常开发中应用都只须要用到几个简略的命令即可,所以本文会先从_名词解析_介绍,在介绍Git的_常用命令_在我的项目中的利用。 名词解析对于Git能够在官网下载应用,在介绍命令前也来了解几个名词概念 工作区指的是在电脑里能看到的目录,目录里有你操作的各种文件 版本库在工作区有一个暗藏的文件叫.git,这个就是Git的版本库,版库里蕴含称为stage的暂存库,还有Git给咱们创立的第一个分支master,以及指向master的指针HEDE 近程仓库在github、gitlab或gitee这写平台上创立的代码仓库,与本地版本库做关联,就能实现上传版本我的项目或文档 常用命令Git在工作中罕用的命令有 git configgit init git clonegit statusgit addgit commit git loggit resetgit push git pullgit stashgit branchgit checkoutgit mergegit fetchgit tag接下来会一一介绍这么命令的用法 git config配置个人信息,包含用户名和邮箱git config --global user.name "my name"git config --global user.email "my email.com"这样在代码后提交的提交记录,就会是有本人设置的个人信息,一部分公司也会依据代码提交的信息对代码做审核决定年终考评奖金等 ssh-keygen -t rsa -C "my email.com"创立秘钥,生成的秘钥放在~/.ssh目录下,依据提醒全副回车即可,操作实现之后将公钥放在github仓库中,之后操作我的项目就免密输出了 git init初始化git仓库git init初始化一个Git仓库 git clone克隆近程仓库git clone <近程仓库链接>以后的文件夹里就会把近程仓库的我的项目下载到本地 git status查看文件变动状态git status能够看到我的项目中的文件是否提交 git add把工作区的文件提交到暂存区git add <文件名>git add . // 提交工作区全副文件是提交文件的第一步 git commit把工作区的文件提交到git 仓库git commit -m <提交信息>提交文件的第二步 ...

June 26, 2021 · 1 min · jiezi

关于git:搭建Git服务器

在近程仓库一节中,咱们讲了近程仓库实际上和本地仓库没啥不同,纯正为了7x24小时开机并替换大家的批改。 GitHub就是一个收费托管开源代码的近程仓库。然而对于某些视源代码如生命的商业公司来说,既不想公开源代码,又舍不得给GitHub交保护费,那就只能本人搭建一台Git服务器作为公有仓库应用。 搭建Git服务器须要筹备一台运行Linux的机器,强烈推荐用Ubuntu或Debian,这样,通过几条简略的apt命令就能够实现装置。 假如你曾经有sudo权限的用户账号,上面,正式开始装置。 第一步,装置git: $ sudo apt-get install git第二步,创立一个git用户,用来运行git服务: $ sudo adduser git第三步,创立证书登录: 收集所有须要登录的用户的公钥,就是他们本人的id_rsa.pub文件,把所有公钥导入到/home/git/.ssh/authorized_keys文件里,一行一个。 第四步,初始化Git仓库: 先选定一个目录作为Git仓库,假设是/srv/sample.git,在/srv目录下输出命令: $ sudo git init --bare sample.gitGit就会创立一个裸仓库,裸仓库没有工作区,因为服务器上的Git仓库纯正是为了共享,所以不让用户间接登录到服务器下来改工作区,并且服务器上的Git仓库通常都以.git结尾。而后,把owner改为git: $ sudo chown -R git:git sample.git第五步,禁用shell登录: 出于平安思考,第二步创立的git用户不容许登录shell,这能够通过编辑/etc/passwd文件实现。找到相似上面的一行: git1001:1001:,,,:/home/git:/bin/bash改为: git1001:1001:,,,:/home/git:/usr/bin/git-shell这样,git用户能够失常通过ssh应用git,但无奈登录shell,因为咱们为git用户指定的git-shell每次一登录就主动退出。 第六步,克隆近程仓库: 当初,能够通过git clone命令克隆近程仓库了,在各自的电脑上运行: $ git clone git@server:/srv/sample.gitCloning into 'sample'...warning: You appear to have cloned an empty repository.剩下的推送就简略了。 治理公钥如果团队很小,把每个人的公钥收集起来放到服务器的/home/git/.ssh/authorized_keys文件里就是可行的。如果团队有几百号人,就没法这么玩了,这时,能够用Gitosis来治理公钥。 这里咱们不介绍怎么玩Gitosis了,几百号人的团队根本都在500强了,置信找个高水平的Linux管理员问题不大。 管理权限有很多岂但视源代码如生命,而且视员工为窃贼的公司,会在版本控制系统里设置一套欠缺的权限管制,每个人是否有读写权限会准确到每个分支甚至每个目录下。因为Git是为Linux源代码托管而开发的,所以Git也继承了开源社区的精力,不反对权限管制。不过,因为Git反对钩子(hook),所以,能够在服务器端编写一系列脚本来管制提交等操作,达到权限管制的目标。Gitolite就是这个工具。 这里咱们也不介绍Gitolite了,不要把无限的生命节约到权限奋斗中。 小结搭建Git服务器非常简单,通常10分钟即可实现; 要方便管理公钥,用Gitosis; 要像SVN那样变态地管制权限,用Gitolite。

June 25, 2021 · 1 min · jiezi

关于git:关于码云Gitee和GitHub的基本操作

git是什么?还是科普一下吧:Git是一个开源的分布式版本控制系统,能够无效、高速的解决从很小到十分大的我的项目版本治理(来自我大百度) 当初越来越多的公司曾经应用git来进行我的项目的版本治理,,应用起来特地的不便,多人开发效率也大大提高,然而首先先有一个git仓库,git仓库分为两类:公有仓库和共有仓库,GitHub因为是开源的,貌似仓库是公开的,窃密的貌似要rmb,码云能够用公有仓库。 码云和github的区别:码云国内,GitHub国外。GitHub是全英文并且用户基数多,出名的库也多;而码云全是中文,且大部分用户是国人,优良的库绝对于GitHub比拟少。 对于集体而言,码云和 GitHub 并不是一种非此即彼的抉择(然而码云对English不是很优良的童鞋还是很敌对的)这两个网站的性能和操作比拟相似,我这里简略的介绍一下本地与近程的提交。 废话不多说,间接上图文(嘿嘿)首先关上链接注册账号:码云Gitee Github 这里我注册好了,就不注册了,另外Gitee和GitHub第一次配置的时候须要配制密钥,我这么配好了,就不赔了,须要的配置形式的同学能够留言。 # Gitee 1 创立新的仓库,ps:这里有个坑,一会整一下。 2 进入新创建的仓库,关上终端,进入你要提交的我的项目外面,上图! 3 这里在进行 git push -u origin master的时候我报了个错如下: 4 通过钻研发现11月份是网站把邮箱的平安降级了,详情能够百度,代码提不下来了,解决如下: 5 解决了之后再运行 终端: 6 这时候咱们的我的项目基本上就曾经在Gitee上存好了,而后接下来咱们用vs code这个编辑器搞一下。 这外面有一些性能,能够代替终端中的一下指令,还是比拟好用的。上面我贴一些罕用的git终端指令git init //初始化git暗藏文件git status //查看提交状态git add . git commit -m ‘xxx’ //这两个是将咱们的代码放到暂存区期待上传到近程仓库git remote add origin https:xxx.gitgit push -u origin master // 通过这两个命令将咱们的代码提交到近程仓库git clone https:仓库地址 //将咱们的代码从近程仓库,拷贝内容到本d地git pull //将近程的仓库的内容同步到本地7 总结:vs code 能够提供咱们去操作近程仓库的办法,还是比拟不便的,还有下面的例子也要留神,多人同时开发的话肯定要先git pull同步最新的代码,防止前面git push的时候抵触。 # GitHub 1 Github和 Gitee的操作差不多,这里就不这么细了。也还是先注册,配置密钥,我这里弄好了就不弄了,须要的童鞋要搞一下。2 首先也是创立一个新的仓库,只不过是英文的,哈哈,不多说,上图! 持续!这里有一个小坑,大家留神一下 把main 改成master3 基本上就这样,后续再更新、、、

June 24, 2021 · 1 min · jiezi

关于git:git推送文件到gitee

注册gitee账号设置姓名、个人空间地址点击头像旁边的加号,新建仓库装置git# 设置姓名和邮箱,姓名是注册gitee时设置的姓名,邮箱是注册gitee的邮箱git config --global user.name "chny"git config --global user.email "xxxxx@163.com"# 查看git config user.namegit config user.email增加SSH公钥关上git bash,输出:ssh-keygen -t rsa -C "xxxxx@163.com"一路enter后,生成SSH key,关上C:/User/用户/.ssh,id_rsa为私钥,id_rsa.pub为公钥关上id_rsa.pub文件,复制key,增加到gitee的SSH公钥验证是否增加胜利,git bash输出:ssh -T git@gitee.com推送文件到近程仓库# 新建一个文件夹作为本地仓库,右键git bash关上,初始化为本地仓库git init# 将要推送的文件复制到该文件夹,将文件提交到暂存区git add 文件名# 将暂存区的文件提交到本地分支master,并增加备注 git commit -m "备注"# 关联近程仓库git remote add origin https://gitee.com/个人空间地址/仓库名.git# 将本地master分支的文件推送到近程master分支,第一次推送时需加 -ugit push -u origin master第一次推送时会弹出一个弹框,须要输出用户名和明码,是gitee登录时的用户名和明码第一次推送胜利后会生成凭据,倡议不要批改或删除,否则会报错:incorrect username or password ( access token )增加或批改仓库当本地仓库增加新文件或有批改时,只需将批改后的文件夹同步到近程仓库即可 git add 批改后的文件 git commit -m "备注" git push origin master

June 23, 2021 · 1 min · jiezi

关于git:Git提交信息要满足的格式

Git提交信息的格局要满足如下/^(revert: )?(feat|fix|docs|dx|style|refactor|perf|test|workflow|build|ci|chore|types|wip|dep)(\(.+\))?: .{1,50}/正则表达式 示例如下提交信息呈现在Features大题目,compiler次题目下: feat(compiler): add 'comments' option展现如下: Featurescompiler: add 'comments' option如下提交信息呈现在Bug Fixes大题目,v-model次题目下,跟随着#28问题的链接: fix(v-model): handle events on blurclose #28如下提交信息呈现在Performance Improvements大题目,core次题目下,BREAKING CHANGE下一行跟随着中断性变更的理由: perf(core): improve vdom diffing by removing 'foo' optionBREAKING CHANGE: The 'foo' option has been removed.如果以下提交和提交667ecc1在同一版本下,则该提交信息不会呈现在变更日志中。如果没有在同一版本下,该提交将呈现在“Reverts”大题目下 revert: feat(compiler): add 'comments' optionThis reverts commit 667ecc1654a317a13331b17617d973392f415f02.残缺提交信息的格局提交信息蕴含题目行、主体内容和页脚正文,其中,题目行蕴含批改类型type、批改影响的范畴(作用域)scope、批改内容概述subject。 <type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>以上,首行是题目行,题目行是必填的,题目行的作用域scope是可选的。 Revert如果某个提交回滚到上一次提交,提交信息应该以revert:开始,后续是该提交的题目行。 主体内容应该写"This reverts commit <hash>",其中,<hash>指向要回滚的提交。 Type如果提交信息的题目行前缀是feat、fix或perf,则该提交信息会呈现在更新日志中。其中,中断性变更永远都会呈现在更新日志中,不管题目行前缀是什么。 其它前缀用哪个,须要依据状况自行酌办。举荐应用的前缀docs, chore, style, refactor和test,这些前缀的提交信息不会呈现在更新日志中。 Scope作用域能够是任何内容。 如文章结尾示例中的core,compiler, ssr, v-model, transition... Subject概述是以后提交的简要形容 应用复数、当初时,如“change",而不是"changed"过来式,也不是"changes"。首字母不要大写不要以"."完结Body和Subject一样,应用复数、当初时,如“change",而不是"changed"过来式,也不是"changes"。 主体内容应该包含更新的动机,以及这次提交与以前的提交的比照。 Footer页脚正文应该蕴含对于中断性变更的任何信息,也是标注此提交敞开了哪条GitHub问题的中央。 中断性变更应该以单词BREAKING CHANGES: 结尾,":"后追随一个空格或两个换行符。紧随`BREAKING CHANGES: 后的其余提交音讯将用于标注解决了什么问题。 ...

June 21, 2021 · 1 min · jiezi

关于git:基于向开源项目提PR的常见git操作

引言作为一个初入职场的程序员,想必大家都会面临的一个问题就是如何提交代码,Git操作说难也难,说易也易,面向百度也能搜出各式各样的教程,而笔者仍然抉择写一篇,当然是因为笔者发现在工作中用到的和网上现有的教程存在一些差别。 (Ps:可能有些小白也和当初的我一样并不知道PR是什么~,这里解答一下,就是Pull Request) 筹备工作首先你的电脑须要可能能够输出git命令(即:装置Git)Git装置地址 查看是否电脑是否装置Git: 在终端输出 git version了解Git 的工作区、暂存区、仓库区、近程仓库 工作区:即本地代码所寄存的中央(电脑磁盘中)暂存区:长期寄存改变的文件的区域仓库区:寄存了所有版本的数据近程仓库:即github、gitlab、gitee等代码托管平台fork已经应用gitlab作为近程仓库时,只须要间接clone即可,当初须要应用了github向开源我的项目提交pr之后,发现第一步是fork 在github中找到想参加的开源我的项目,例如KubeSphere点击右上角 Fork按钮!点开本人的github账号,发现自己的仓库中多了一个KubeSphere进入当该我的项目中,点击Clone or download,而后复制https链接 clone关上终端进入一个你想寄存代码的目录而后执行如下操作 git clone https://github.com/***/***.git// 前面的链接就是上一步骤中赋值的链接// 此时在master主分支与上游分支建设连贯 此时应用git remote -v可发现只与本人仓库建设连贯,还须要与上游建设连贯,这样能力将本人仓库中的我的项目的更改提交到开源我的项目中(只有origin 结尾的两行代码) git remote add upstream [url]// 这里的url为 开源我的项目的https url,例如https://github.com/kubesphere/kubesphere.git,创立连贯后可再次输出`git remote -v`发现多了upstream 结尾的两行创立分支对于创立分支肯定要留神,因为如果创立的地位不对,当你提交PR的时候,会发现PR中的改变文件比你须要的多,而多进去的那些是你已经曾经提过PR的文件 分支创立要留神是以什么分支为根底创立(即输出 git branch显示分支为什么)为什么要强调这一点呢,因为笔者就常常因为大意导致创立的分支超前于主分支,因而提PR时多出了很多我不须要的文件重点在于,这些差别往往只有在提PR之后查看文件变动才会发现,因为对于你以后分支的改变来说,那些多余的改变都是曾经commit并且push了的局部,而这些局部对于上游仓库而言,又属于变动局部说了那么多,仿佛还没有解说如何创立分支~ // 创立分支的两种形式 以创立的分支名为 dev 为例// 1. 间接创立分支并变基分支到该分支git checkout -b dev(分支名)// 2. 先创立分支再变基分支git branch dev(分支名) --> 创立分支git checkout dev(分支名) --> 变基分支输出git branch能够查看所有分支,曾经以后所在分支 留神:每次提交完PR,须要批改新的代码时,要留神之前提的PR是否曾经merge,如果没有merge,而你仍然在该分支批改代码,那么你的PR会主动合并新的push。 这个时候则须要,基于master分支从新创立一个新的分支再进行后续的操作批改代码这一步骤,对于懂得人来说是最简略的,对于不懂的人来说是最难的,就不在该文章中做过多的赘述了~ 留神: 在每次更改代码之前,记得先git pull 拉取代码,免得代码库曾经产生变动, 暂存并提交代码查看代码的状态git status // 查看代码状态将代码增加到暂存区 ...

June 21, 2021 · 1 min · jiezi

关于git:瑞思拜不愧是GitHub上最励志的计算机自学教程

之前很早就有耳闻过一个名叫John Washam的外国小哥自学编程的励志故事,还曾一度登上GitHub热度榜。 他为了让本人从一个非CS科班的自学党变质成Google的软件工程师,每天保持自学8~12小时,继续了数月之后,他如愿以偿,成为了一名大厂软件开发工程师。 重点是这位小哥也乐于分享,他将本人成为一个软件工程师的学习历程整顿成了一个丰盛的GitHub资源仓库并开源了进去(github.com/jwasham/coding-interview-university),而且一度被称为GitHub上最励志的计算机自学教程! 昨天进去又看了一眼,好家伙,截止到目前为止狂砍了171k+的Star,吓得我啪的一下当场就献上了膝盖,很快啊! 要不说开源我的项目的魅力大呢,有泛滥开源爱好者参加进来将这份学习笔记翻译成了很多语言的版本,其中就包含简体中文。 认真看了一下这份自学主题清单你就会发现,内容涵盖的货色可真不少,比方: 开发环境和开发工具学习必备计算机基础知识编程语言的抉择各种数据结构罕用算法和算法复杂度剖析设计模式操作系统根底计算机网络根底软件测试零碎设计问题书单举荐面试注意事项和面试筹备相干学习办法和心得...除了这些之外,这份自学清单甚至还波及到无关计算机硬件根底、信息论、密码学、计算机平安、信号处理、离散数学、概率论、计算机领域经典论文等一系列内容,能够说十分硬核了。 看完之后,除了领略到了作者这份硬核学习主题清单自身的技术内容之外,更让我产生共鸣的是他的学习态度和学习办法,这也是我领会最深的一个点。 素日里跟很多小伙伴也探讨过各种对于学习办法的问题。对于自学编程,本人也是踩着坑一步一步过去的。我集体到当初仍然最深信的一点那就是:学习不在入,而在出。 什么意思呢? 很多人在自学的过程中总是会在意本人看了多少书,听了多少视频,刷了多少题目,仿佛这些才是掂量本人是否真正学会某项技术点的规范。 然而必须要明确的是,其实它们只是取得常识的一种路径而已,并非最终目标。看了这么多材料,刷了这么多题目,到底有多少是本人真正死记硬背,并转化成本身能力的进步呢? 如果仅仅为了做而做,而把本人陷入一种繁忙的假象之中,这反而成了大家所说的伪怠惰了。把本人弄得很累,但却未能尝到真正晋升技能的苦涩点,这可能是你我已经所共有的感触。 所以接下来聊聊几点小想法吧,集体在过来的工夫里一直尝试和执行,感觉对本人的帮忙还是挺大的。 提前做好全局调研、统揽和路线布局。入手学习之前做好学习路线的全局布局非常重要,看书、刷题不是最终目标,最终还是要关注本人常识体系的造成。 不做布局,上来就一头扎进常识的陆地往往会让人迷失自我。我发现一个广泛问题(当然也包含我本人),其实大家在学习过程中的最痛点往往不在于说具体某一项技术该怎么学,这个不是最痛点。最痛点往往在于很多人对于其想学的某个技术(岗位)方向,并没有一个技术点上的宏观视角。 身处其中而不知所向,我感觉这是集体自学路线上最大的歹意!没提前做好布局一头扎进去,长此以往会很容易被各种外部或内部的因素给劝退。东一榔头西一棒子迟早会把本人的学习激情给浇灭。 实时洞察本人位于学习门路中的地位我感觉还是挺重要的,一来不便本人掌控工夫和效率,另外也能够减少本人的取得感与成就感,学习有奔头也很重要不是吗? 做好留痕,步步为营。就像去一个中央游览咱们都习惯拍照纪念一样,在学习过程中遇到的每一个艰难,踩过的每一个坑,留下的每一点感想,取得的每一个成就,都值得被记录下来。 集体博客、电子笔记、GitHub仓库、Wiki文档,我感觉都是十分不错的形式,不可能有白走的路,凡事过往,皆为财产。 随着工夫的积攒,这将是一笔贵重的资源,这也将见证着本人的学习之路,下面的这位小哥不也是这么做的吗? 总结、输入、回顾。不晓得大家有没有这种感觉,有时候某些常识非得回炉重造个几次能力在前面某一时刻忽然有了一种打通任督二脉的感觉,就像这位小伙伴所说的: 说实话,我也很迷恋这种感觉。 看了再多本书其实也测验不了本人是否真正学会了某项技术,而只有能从本人口中或者笔下所能清晰表达出来的常识才真正属于本人。 用本人的语言或者思维导图把所学常识整顿成文、梳理成图,这样也不便本人后续的温习和回顾。 另最近花了大把力量,把自用的编程学习资源做了个大整顿。 都是纯肝货,目录如下。 该内容 GitHub https://github.com/rd2coding/Road2Coding 曾经收录,外面还有我整顿的6大编程方向的自学路线+知识点大梳理、我的简历、面试考点、几本硬核pdf笔记,以及我的程序员人生,欢送star。 整顿不易,欢送反对,下期见!

June 17, 2021 · 1 min · jiezi

关于git:git日常操作命令

Git 罕用操作配置操作git config --list # 查看git配置信息git config user.name # 查看git用户名git config user.email #查看邮箱配置git config --global user.name "nameVal" # 全局配置用户名git config --global user.email "eamil@qq.com" # 全局配置邮箱基本操作git init #初始化我的项目git add 文件名 #增加指定文件git add . #增加所以文件git commit -m "提交正文" #增加一个版本git log #查看历史版本(不蕴含回退局部的)git reflog #查看历史版本(具体 ,蕴含回退局部的版本)git reset --hard 提交的版本号 #回退到指定的历史版本git push -f #回退版本后,近程也回退 (强制推送)git check out #git reset --softgit reset headgit reset --mix# gitlab 本人创立代码托管(基于linux)分支操作- basegit clone -b 分支名 仓库地址git branch -a //查看线上分支git branch //查看本地分支- 本地创立一个新的分支并推送到近程仓库创立本地分支git checkout -b 新分支名执行该指令后,会在本地创立一个新分支,该分支是从以后分支上检出的,所以所有文件内容都和以后分支截然不同,这是失常的。创立胜利后,将主动切换至新分支上。 ...

June 17, 2021 · 3 min · jiezi

关于git:Git不同仓库使用不同的Key

生成 Key ssh-keygen -t rsa# 我把key生成在 ~/.ssh/github目录下,文件名为leonard-repo,文件如下:# ~/.ssh/github/leonard-repo# ~/.ssh/github/leonard-repo.pub# 查看公钥: cat ~/.ssh/github/leonard-repo.pub在GitHub中退出 Key网页github.com -> 某个仓库[ 假如为 leonard-repo] -> Setting -> Deploy keys新建一个 key,把 leonard-repo.pub 这个公钥的内容复制到其中 本地设置SSH 设置编辑 ~/.ssh/config,退出以下内容 # leonard-repo 当初是 github.com的别名# 设置别名是避免烦扰其余仓库# 名字轻易起,然而须要和待会的 Git本地仓库设置 中的统一# github.com/leonard/leonard-repoHost leonard-repoHostname github.comidentityFile ~/.ssh/github/leonard-repoUser gitGit 本地仓库设置编辑 我的项目/.git/config 把 [remote "origin"] url = git@github.com:leonard/leonard-repo.git fetch = +refs/heads/*:refs/remotes/origin/*中的 github.com 改为 leonard-repo, 也就是上面这样 [remote "origin"] url = git@leonard-repo:leonard/leonard-repo.git fetch = +refs/heads/*:refs/remotes/origin/*END

June 16, 2021 · 1 min · jiezi

关于git:顶想云写作服务开启第一次公测

在历时大半年的架构重构工作后,看云的写作服务曾经独立为顶想云写作服务,同时也标记着看云新版重构工作的一个里程碑曾经实现,目前曾经开启了顶想云写作Github版本的第一次公测,待Github版本稳固后,将会陆续减少其它的平台反对,包含Gitlab和Gitee,同时看云的写作服务也会应用新的云写作服务替换。 新版的云写作服务作为ThinkPHP官网生态服务之一,业已纳入顶想云服务领域,将会提供包含Github、Gitlab和Gitee在内的版本库平台反对,同时也更不便企业抉择适合的版本库平台进行私有化部署。 新版云写作服务公测地址 https://x.topthink.com (目前仅反对Github版本库写作,其它平台陆续上线中)。你须要首先在Github创立本人的文档仓库或者抉择本人的我的项目仓库,而后在输入框外面输出你的仓库URL地址(留神不是Git版本库地址): 而后点击仓库名称就能够开始进行文档编辑写作了(反对抉择浏览主题和装置写作插件)。 写作实现后在左侧提交栏抉择提交,并同时抉择进行公布操作, 能够在公布治理中查看公布进度及状态 公布实现就能够通过Github的pages服务来浏览文档了。 反对暗黑模式浏览 更多插件和开发者核心将会在第二次公测中开启,敬请期待!

June 15, 2021 · 1 min · jiezi

关于git:CSC415-Command-Line-Arguments

CSC415-Assignment-1Assignment 1 – Command Line Arguments Welcome to your First homework assignment.Let me set some of the expectations. Code should be neat, well documented. Variables should have meaningful names and be in a consistent format (I do not care if you use camelCase or under_scores in variables but be consistent.All filenames should be <lastname><firstname>_HW<#><optional>.<proper extension>, except Makefile.In addition, each file should have a standard header as defined below. Make sure to put in your section number, your name, your student ID, a proper project name, GitHub name, filename, and description of the project. ...

June 14, 2021 · 2 min · jiezi

关于git:git-中合并已经push-的commit

有时候在改一些bug的时候,须要重复的commit,而后发动pull request时,commit 号就会十分多,有的公司会要求合并这些commit,这时咱们能够用 squash 来合并曾经提交的commit. 首先git log 查看曾经提交的记录 git logcommit 7e1c7e33c328f9c1fc954790386b14978612a30f (HEAD -> newbranch)Author: yuanjie111 <284522843@qq.com>Date: Sat Jun 12 13:55:58 2021 +0800111commit 3a30ba5c71349947e512c6b0c481854a19418d10 (origin/newbranch)Author: **Date: Sat Jun 12 13:03:01 2021 +0800config centercommit 2873ff1b3c92e9a4b0c4937a5a4a27d5178efe2bAuthor: ***Date: Sat Jun 12 12:48:29 2021 +0800config centercommit ba62f39480360977e08f6e1e288869f2fe4a7ed8Author: ***:...skipping...commit 7e1c7e33c328f9c1fc954790386b14978612a30f (HEAD -> newbranch)Author: ****Date: Sat Jun 12 13:55:58 2021 +0800111而后应用 git rebase -i HEAD~<number> git rebase -i HEAD~10//HEAD~10的含意是从头部开始追溯10条记录 将须要留下的commit 放弃pick 状态,须要合并的改为 s即可,如下图,只保留了一个commit, 而后:wq退出 3.push 到origin 则实现了合并。 ...

June 12, 2021 · 1 min · jiezi

关于git:在Eclipse中使用GIT拉取项目

- 步骤1:应用git来导入我的项目菜单-File->import->Git->Projects from Git - 步骤2:抉择克隆URL这示意应用某个服务器上的git资源 - 步骤3 : 输出git参数 - 步骤4:是否提供明码提醒询问是否须要提供明码提示信息,个别都抉择NO - 步骤5: 抉择分支 - 步骤6:本地寄存地位依据集体我的项目在本地的地位 - 步骤7:是否提供明码提醒抉择Import existing Eclipse projects - 步骤8:确定地位 我的项目拉取胜利!!!!!!!!!!!!!!!!!!!!!!

June 7, 2021 · 1 min · jiezi

关于git:Enter-passphrase-empty-for-no-passphrase以及ssh配置出现这个问题竟然是因为自己蠢

之前我的项目中应用git,每次clone以及push的时候我都须要输出明码。明天忽然发现别的共事都不必,而后认真在网上找了解决方案发现网上都帖子解决方案都不太对劲,也可能是没看明确吧 比方:https://blog.csdn.net/android...的确能够本次开机过程中应用git不须要输出明码,然而下一次开机还是要输出明码。问了共事,他们也示意就是依照网上的设置的。直到察看共事配置流程才发现,当执行到SSHkey创立的时候,这两步共事是间接按的回车,而我认为这个是gitlab的明码所以输出的是gitlab的明码而如果这里是空的话,的确之后就不须要输出明码了。passphrase这个并非是gitlab的明码,而是git的平安口令我感觉这个口令更多的是为了保障每次应用git的时候更平安,所以天然就须要每次输出那么如果你不想输出passphrase的话,则不须要设置平安口令。 即: 想管制本人的clone/push/pull        在设置sshkey的输出明码 想间接命令提交                              不须要设置sshkey间接回车 设置了,还不想每次提交都要输出 开机 ssh-add -K xxx 设置了,不想输出                         像我一样蠢了,自圆其说另外网上的教程上的确有说间接按三次回车,然而没明确说这个是干什么的,忽略了 问题其实不是大问题,然而git之前我的项目中没有用,遇见了这个问题,网上又没有明确的说明确为什么产生这个问题的,所以写了个文章。

June 3, 2021 · 1 min · jiezi

关于git:Git工作原理高清图解

本文章转自:乐字节 文章次要解说:Git工作原理 获取更多Java相干常识能够关注公众号《乐字节》 发送:999 Git 是程序员学习和工作都离不开发工具,也是非程序员好用的文档版本管理工具,如果你略微了解 Git 的工作原理,这篇文章可能让你了解的更透彻。 根本用法 下面的四条命令在工作目录、暂存目录(也叫做索引)和仓库之间复制文件。 你能够用 git reset -p, git checkout -p, or git add -p进入交互模式。 也能够跳过暂存区域间接从仓库取出文件或者间接提交代码。 约定后文中以上面的模式应用图片。 绿色的5位字符示意提交的ID,别离指向父节点。分支用橘色显示,别离指向特定的提交。以后分支由附在其上的HEAD标识。这张图片里显示最初5次提交,ed489是最新提交。main分支指向此次提交,另一个stable分支指向祖父提交节点。 命令详解Diff有许多种办法查看两次提交之间的变动。上面是一些示例。 Commit提交时,git用暂存区域的文件创建一个新的提交,并把此时的节点设为父节点。而后把以后分支指向新的提交节点。下图中,以后分支是main。在运行命令之前,main指向ed489,提交后,main指向新的节点f0cec并以ed489作为父节点。 即使以后分支是某次提交的祖父节点,git会同样操作。下图中,在main分支的祖父节点stable分支进行一次提交,生成了1800b。这样,stable分支就不再是main分支的祖父节点。此时,合并 (或者 衍合) 是必须的。 如果想更改一次提交,应用 git commit --amend。git会应用与以后提交雷同的父节点进行一次新提交,旧的提交会被勾销。 另一个例子是拆散HEAD提交,后文讲。 Checkoutcheckout命令用于从历史提交(或者暂存区域)中拷贝文件到工作目录,也可用于切换分支。 当给定某个文件名(或者关上-p选项,或者文件名和-p选项同时关上)时,git会从指定的提交中拷贝文件到暂存区域和工作目录。比方,git checkout HEAD~ foo.c会将提交节点HEAD~(即以后提交节点的父节点)中的foo.c复制到工作目录并且加到暂存区域中。(如果命令中没有指定提交节点,则会从暂存区域中拷贝内容。)留神以后分支不会发生变化。 当不指定文件名,而是给出一个(本地)分支时,那么HEAD标识会挪动到那个分支(也就是说,咱们“切换”到那个分支了),而后暂存区域和工作目录中的内容会和HEAD对应的提交节点统一。新提交节点(下图中的a47c3)中的所有文件都会被复制(到暂存区域和工作目录中);只存在于老的提交节点(ed489)中的文件会被删除;不属于上述两者的文件会被疏忽,不受影响。 如果既没有指定文件名,也没有指定分支名,而是一个标签、近程分支、SHA-1值或者是像main~3相似的货色,就失去一个匿名分支,称作detached HEAD(被拆散的HEAD标识)。这样能够很不便地在历史版本之间相互切换。比如说你想要编译1.6.6.1版本的git,你能够运行git checkout v1.6.6.1(这是一个标签,而非分支名),编译,装置,而后切换回另一个分支,比如说git checkout main。然而,当提交操作波及到“拆散的HEAD”时,其行为会略有不同,详情见在上面。 HEAD标识处于拆散状态时的提交操作当HEAD处于拆散状态(不依附于任一分支)时,提交操作能够失常进行,然而不会更新任何已命名的分支。(你能够认为这是在更新一个匿名分支。) 一旦尔后你切换到别的分支,比如说main,那么这个提交节点(可能)再也不会被援用到,而后就会被抛弃掉了。留神这个命令之后就不会有货色援用2eecb。 然而,如果你想保留这个状态,能够用命令git checkout -b name来创立一个新的分支。 Resetreset命令把以后分支指向另一个地位,并且有抉择的变动工作目录和索引。也用来在从历史仓库中复制文件到索引,而不动工作目录。 如果不给选项,那么以后分支指向到那个提交。如果用--hard选项,那么工作目录也更新,如果用--soft选项,那么都不变。 ...

June 2, 2021 · 1 min · jiezi

关于git:大厂git工作流

基本操作git add .git commit -m "fix: xxx"git push开发工作流惯例操作 从master(正式环境)切分支 feat-xxx-xxx (以后业务简称)feat-xxx-xxx 代码merge(合并)到text-release(测试环境)测试环境通过测试后,将feat-xxx-xxx代码合并到master多人多分支一次合并到master(俗称发车) 测试通过后,从master切分支v2.x.x(待发布版本)将feat-xxx-xxx、feat-yyy-yyy等分支在github/gitlab网页上以New merge request(mr)的模式发送合并申请(pull request)期待相干负责人code review过后,再将v2.x.x分支合并到mastermr存在抵触时(为避免抵触倡议应用这里的残缺流程比拟稳) 从master切分支feat-xxx-xxxfeat-xxx-xxx代码merge到rest-release提交测试测试通过后,从master切分支v2.x.xfeat-xxx-xxx合并v2.x.x外面的代码(因为你在开发的过程中master/v2.x.x可能曾经合了其余共事的代码了)这时有抵触解决抵触,并且本地代码最好再运行一遍确保十拿九稳再将feat-xxx-xxx通过New merge request的形式新建一个pull request到v2.x.x期待相干负责人code review过后Merge代码命令集git stash(代码暂存,非commit)个别用在你在有代码批改的状况下须要切分支又不想提交commit时可用 git stash 存储以后changegit stash save "save message" 给以后存储事件增加备注git stash list 查看stash存储列表git stash pop 复原之前缓存的工作目录并删除这一条stashgit reset(代码回退) 第一步 git log //取得commit信息第二步 复制回退对应工夫的commit hash值第三步 git reset --soft xxxxxxx(commit hash值)--hard是不保留以后已批改的,--soft是保留以后已批改的第四步 git push -f //强制提交代码git reflog(时光穿梭机) 代码被不小心回退了怎么修复回来?第一步 git reflog //取得所有的git操作第二步 git reset --hard xxxxxxxxgit cherry-pick 修复到了指定hash点时,这个之后的就没了,如何加上来呢?第三步 git cherry-pick xxxxxxx(须要被加上来的commit hash)fork库拉取上游代码 第一步 增加upstream上游仓库的近程链接git remote add upstream https://github.com/xx/repo第二步 git pull upstream或者拉取指定分支(如master) git pull upstream master本地更新近程分支列表 ...

May 27, 2021 · 1 min · jiezi

关于git:GITNOTEBOOK基于-GIT-的轻量级同步笔记软件

git-notebook一款基于 git 的笔记软件,利用 git 仓库建设属于本人的同步笔记本。笔记性能应用 git 作为在线笔记寄存的仓库,实现不同设施之间的笔记同步;应用开发人员罕用的 markdown 编辑器进行笔记编辑;实现图片截图的间接复制黏贴(相似 QQ 截图间接黏贴到笔记)开源地址:gitee源码: https://gitee.com/ericfang/git-notebook 安装包下载:https://gitee.com/ericfang/git-notebook/releases 软件界面与操作软件自身分为三个程度栏位; 第一个栏位:显示笔记文件夹目录构造; 第二个栏位:显示以后抉择文件夹的文件以及目录; 点三个栏位:编辑文件的 markdown 编辑 和 预览; 增加和编辑笔记点击下图按钮进行笔记的增加和删除; 点击下拉列表切换笔记; 增加目录文件左侧窗口为笔记文件夹目录树结构,可 右键 增加或间接增加 增加文件夹 按钮增加一级目录; 可间接拖动 第二栏 的文件或文件夹来自在挪动文件到其余目录; 增加笔记文件点击 文件夹 和 文件 按钮来增加对应文件。 Markdown 编辑点击编辑按钮进入 markdown 编辑按钮。 编辑文件并按 ctrl + s 保留文件内容(笔记将主动同步提交到 git ); 点击 预览 按钮回到预览模式。 BUG 提交软件如有任何问题可提交 issue 或间接邮件给我 fangjc1986@qq.com 。 感谢您的应用与反对。

May 27, 2021 · 1 min · jiezi

关于git:Git学习

https://linux.cn/article-1043...https://www.jianshu.com/p/be3...

May 26, 2021 · 1 min · jiezi

关于git:git-头指针分离

遇到不会解决的问题,最好不要乱动免得给本人解决谬误路上徒增老本!昨天焦急上班,眼看就要6点了,有事在身本想脚底抹油,逃之夭夭的,就在我git push 的时候命令给我之前没就见过的bug,如下:左下角显示的原本应该是红字高亮前面的指向(过后焦急跑路没截图难堪);过后是能够 add 并且commit的 然而就是push不下来; 什么是头指针拆散? 所谓的拆散头指针状态就是HEAD不再指向分支,而是间接指向某个commit; 造成这样的起因是什么?如果执行 git checkout commitId就会导致HEAD指向该次提交,而不在指向分支,而后提醒头指针拆散, 之后你进行的所有的操作都是失常进行的,然而不在任何分支上!如果此时切换回master分支,你会发现刚刚在拆散头指针状态下对文件做了批改提交在master分支下是看不到的,并且因为c3这次提交不在任何分支上,在将来极有可能会被Git清理掉。遇到头指针拆散应该怎么解决首先,遇到事件不要慌,拿出手机发个朋友圈,来杯咖啡期待大神帮忙,或者自行百度均可!(开开个玩笑!)先说个谬误的办法,这个时候不能抉择切换到master,而后merge,这样做会显示merge胜利,然而代码却没有过去,正确的出解决办法是把以后的的src打一个压缩包,而后在切换到master, 在将src压缩包还原即可,不过这样问题就是如果之前的master上未合并的代码那就回导致代码失落;那么如何优雅的解决这个问题呢?咱们能够抉择在以后分支创立分支,而后在切换到master上,进行merge,最初在手动创立的分支即可!至于头指针批改的就不必管了git会主动回收,并且切换到master当前在运行git branch也是看不到那个分支存在的 至于说为什么不要乱动,因为咱们一个大神一顿操作,我疯了

May 26, 2021 · 1 min · jiezi

关于git:Git命令总结

Git 后悔药,指的是咱们操作本地代码之后想要复原之前的代码,所须要做的一系列操作,如同是做事悔恨了,想要吃后悔药一样,生存中虽没有后悔药,然而 git 的世界中是存在的哦!系列一:add 之前,也就是还没有增加到暂存区之前# 留神跟切换分支不要搞混了,这个有两个横线,放弃对单个文件的批改git checkout -- filename# 放弃对所有文件的批改git checkout .<!--more--> 系列二:add之后,commit之前# 单个文件回到批改之后,add之前git reset HEAD filename# 所有文件回到批改之后, add之前git reset HEAD .系列三:commit 之后,push之前# 回到add之后,commit之前git reset --soft HEAD^# 回到批改之后,add之前git reset --mixed HEAD^# 回到批改之前,放弃对文件的批改git reset --hard HEAD^# 能够复原到之前任意版本git reset --hard 提交版本号反做一个版本,生成一个新的提交# 例如有三次提交,提交1、提交2、提交3,如果提交2版本有问题,想要撤销,然而不想影响之后的提交3 的内容,这就能够反做提交2git revert -n 版本号# 反做之后会主动生成一个新的提交,这个提交会撤销提交2,而保留提交3#这里可能会呈现抵触,那么须要手动批改抵触的文件。而且要git add 文件名合并分支之rebase#切换到主分支git checkout main# 拉取最新代码git pull# 切换到开发分支git checkout dev# 将本地屡次提交合并成一次提交,益处是只须要解决一次抵触git rebase -i HEAD~2 #合并提交 --- 2示意合并两个# 同步主分支的最新代码到dev分支git rebase main #---->解决抵触--->git rebase --continue# 切换回主分支git checkout main# 在主分支上合并 dev 分支git merge dev# 推送近程git push## 记录性能git rebase --abort #会放弃合并,回到rebase操作之前的状态,之前的提交的不会抛弃;git rebase --skip #则会将引起抵触的commits抛弃掉(慎用!!);git rebase --continue #合并抵触,联合"git add 文件"命令一起用与修复抵触,提醒开发者,一步一步地有没有解决抵触。一次性回退多个提交,并把log合并为一条git revert + git rebase,git revert 597ace36:wqgit revert f187d3ef:wqgit revert d301fafe:wq# 回退了三个版本之后会生成三个新的log# 而后能够应用rebase 合并三个新的loggit rebase -i 597ace36 #也能够HEAD~3相当于合并三个提交历史# 留神 -i 前面的参数是不须要合并的 commit 的 hash 值,这里即从以后工夫往前推的第四个提交,包含新生成的三个提交log#pick 的意思是要会执行这个 commit#squash 的意思是这个 commit 会被合并到前一个commit# 把前面两个pick批改成 squash:wq# 而后进入编辑合并日志的模式,把其中两个 Revert 正文正文掉,只剩一个合并日志如下:#Revert "后悔药系列,revert三个之后合并为一个正文rebash" # This reverts commit 597ace360be8f00575bae40d5bf9bfea551a1c48. # This reverts commit f187d3ef9c9eb0de74b4ad6c0fa5854b0e612539. # This reverts commit d301fafe75cb5fadf5b98f0711c39243e4174e34.:wq分支创立系列# 基于以后分支创立并切换到本地新分支,新分支devgit checkout -b dev# 基于近程dev分支创立新的本地分支,本地没有dev分支呢git chechout -b dev origin/dev# 提交本地分支到近程git push origin dev:dev# 删除近程分支,相当于推送一个空分支到近程分支git push origin :dev# 本地切换分支git checkout dev# 删除本地分支git branch -d dev# 设置本地分支与近程分支的关联,设置关联之后,如果只有一个关联能够间接git pushgit push --set-upstream origin dev# 也能够写全git branch –set-upstream dev origin/dev# 查看本地分支与近程关联git branch -vv# 如果只有一个关联,则能够应用git push间接提交,省略前面的如何紧急切换分支?如何先 pull 在提交代码# 当长期须要去别的分支解决问题,又不想提交以后分支没写完的代码git stash save "暗藏以后没写完的代码"# 这时候就能够切换分支操作了,解决完回来之后进行如下操作# 查看暗藏的列表git stash list# 如果执行此命令会间接删除暗藏列表,如果只有一条方才的暗藏记录,间接用能够,用完之后之前暗藏的代码就回来了,还会删除暗藏列表git stash pop# 如果只想代码回来,不删除暗藏列表,能够执行,stash@{0},复原暗藏列表中的stash@{0}的代码git stash apply stash@{0}# 提交代码之前,能够先暗藏本人代码,而后pull,之后pop放出本人暗藏的代码,解决抵触,提交,这样能够缩小合并的代码git stash save "暗藏本人代码"git pullgit stash pop# 解决抵触# 其中Updated upstream 和=====之间的内容就是pull下来的内容,====和stashed changes之间的内容就是本地批改的内容。碰到这种状况,git也不晓得哪行内容是须要的,所以要自行#确定须要的内容。#解决实现之后,就能够失常的提交了。git add .git commit -m "正文"git push# 留神,发生冲突之后,即便git stash pop,代码也取出来了,然而git stash list中的储存代码记录仍然存在# 这时候因为代码取出来了,所以能够间接删除list中的记录# 不加参数默认删除最新的编号为stash@{0}的记录git stash drop# 或者本人指定删除的编号git stash drop stash@{0}近程删除了一些分支,本地还存在怎么办?# 同步本地和近程的分支git remote prune origin# 用新的提交替换上一次提交,如果没有改变,则替换上一次的提交正文git commit --amend -m "替换上次提交"# 查看以后分支的最近几次提交git reflog合并分支# 例如把dev分支合并到main分支# 首先切换到main分支,并保障所有提交均最新,都pull过了git checkout maingit merge dev# 如果有抵触解决抵触,之后push到近程就能够了关注我,更多精彩文章第一工夫推送给你 ...

May 25, 2021 · 2 min · jiezi

关于git:PHP-从菜鸟到大咖的踩坑之路

https://cloud.tencent.com/dev... 电商Sku设计思维 https://xlswriter-docs.viest.... 借助C扩大来 解决百万 excel文件的导入导出 https://juejin.im/post/686743... 数组巧用 https://juejin.im/post/684490... 起源不一样的数据分页 https://juejin.im/post/684490... curl_multi并发申请 https://juejin.im/post/684490... 排查零碎为啥会运行迟缓 https://juejin.im/post/684490... 本地环境搭建 docker 集体微信音讯推送 http://sc.ftqq.com/?c=code #php调用代码file_get_contents('https://sc.ftqq.com/SCU144549Te2356489fe44a621fd109f8f7484e9dd5ff2878ccf662.send?text=not_complete_sync_order订单同步失败');function sc_send( $text , $desp = '' , $key = 'SCU144549Te2356489fe44a621fd109f8f7484e9dd5ff2878ccf662' ){ $postdata = http_build_query( array( 'text' => $text, 'desp' => $desp ));$opts = array('http' => array( 'method' => 'POST', 'header' => 'Content-type: application/x-www-form-urlencoded', 'content' => $postdata ));$context = stream_context_create($opts);return $result = file_get_contents('https://sc.ftqq.com/'.$key.'.send', false, $context);}工夫范畴//获取今日开始工夫戳和完结工夫戳 $start = mktime(0,0,0,date('m'),date('d'),date('Y')); $end = mktime(0,0,0,date('m'),date('d')+1,date('Y'))-1; //获取昨日起始工夫戳和完结工夫戳 $beginYesterday = mktime(0,0,0,date('m'),date('d')-1,date('Y')); $endYesterday = mktime(0,0,0,date('m'),date('d'),date('Y'))-1; //获取上周起始工夫戳和完结工夫戳 $beginLastweek = mktime(0,0,0,date('m'),date('d')-date('w')+1-7,date('Y')); $endLastweek = mktime(23,59,59,date('m'),date('d')-date('w')+7-7,date('Y')); //获取本月起始工夫戳和完结工夫戳 $beginThismonth=mktime(0,0,0,date('m'),1,date('Y')); $endThismonth=mktime(23,59,59,date('m'),date('t'),date('Y'));strtotime(date('Y-m-d 9:30:00',time())); laravel whereor 查问$extra = $params['extra']; $handle->where(function ($query) use ($extra) { $query->where('admin_name', 'like', "%$extra%")->orWhere('title', 'like', "%$extra%"); });array_walk 和 array_map && array_reduce && array_filter && array_flip 应用#array walk以援用传递的模式遍历你的数组,没有返回值,而且只能解决一个数组$arr = ['a', 'b', 'c'];array_walk($arr, function (&$item) { $item = $item . '_i';});print_r($arr); // ['a_i', 'b_i', 'c_i'];#array_map 应用匿名函数的形式,解决数组里的每个元素。遍历实现后返回一个新的数组,并且能够同时解决多个数组$arr_1 = ['a', 'b', 'c'];$arr_2 = ['你', '好', '吗', '原', '罪'];$arr = array_map(function ($item_1, $item_2) { return $item_1 . '_' . $item_2 . '_i';}, $arr_1, $arr_2); 如果须要获取下标的能够应用 array_keys($arr_1)代替$arr_2print_r($arr); // ['a_你_i', 'b_好_i', 'c_吗_i', '_原_i', '_罪_i']#array_reduce() 函数向用户自定义函数发送数组中的值,并返回一个字符串。 $arr = [ 0 => '全副', 1 => 'a', 2 => 'b', 3 => 'c', ];$index = 0;$options = array_reduce($arr, function($carry, $item) use (&$index){ ## $index则为以后两个元素 $item 的索引 return $carry . '<option value="' . $index++ . '">' . $item . '</option>';}, '');var_dump($options);return;#过滤数组中的内容 $data = [ [ 'id' => 1, 'name' => '你好,234', 'cate' => '生存日记'], [ 'id' => 2, 'name' => '79798', 'cate' => '摄影美图'], [ 'id' => 3, 'name' => '567567', 'cate' => '生存日记'], ];$filtered = array_filter($data, function($item){ return $item['cate'] !== '摄影美图';});print_r($filtered);return;#翻转数组去重array_flip (array_flip($trans)); #移除数组中反复的值:array_unique($arr); #array_flip 和 array_unique区别 array_flip 会保留反复值最初一个,array_unique 只保留反复值的第一个数组遍历思维==数组嵌套循环的时候最内层的遍历完之后指针为空才开始向外层一层一层遍历直到指针遍历完改层数组== ...

May 24, 2021 · 11 min · jiezi

关于git:GO反射类实例

变量的外在机制类型信息:是动态的元信息,是事后定义好的 值信息:是程序运行过程中动静扭转的 反射的应用获取类型信息:reflect.TypeOf,是动态的 获取值信息:reflect.ValueOf,是动静的 反射获取interface值信息 package mainimport ( "fmt" "reflect")//反射获取interface值信息func reflect_value(a interface{}) { v := reflect.ValueOf(a) fmt.Println(v) k := v.Kind() fmt.Println(k) switch k { case reflect.Float64: fmt.Println("a是:", v.Float()) }}func main() { var x float64 = 3.4 reflect_value(x)}反射批改值信息package mainimport ( "fmt" "reflect")//反射批改值func reflect_set_value(a interface{}) { v := reflect.ValueOf(a) k := v.Kind() switch k { case reflect.Float64: // 反射批改值 v.SetFloat(6.9) fmt.Println("a is ", v.Float()) case reflect.Ptr: // Elem()获取地址指向的值 v.Elem().SetFloat(7.9) fmt.Println("case:", v.Elem().Float()) // 地址 fmt.Println(v.Pointer()) }}func main() { var x float64 = 3.4 // 反射认为上面是指针类型,不是float类型 reflect_set_value(&x) fmt.Println("main:", x)}构造体与反射查看类型、字段和办法package mainimport ( "fmt" "reflect")// 定义构造体type User struct { Id int Name string Age int}// 绑办法func (u User) Hello() { fmt.Println("Hello")}// 传入interface{}func Poni(o interface{}) { t := reflect.TypeOf(o) fmt.Println("类型:", t) fmt.Println("字符串类型:", t.Name()) // 获取值 v := reflect.ValueOf(o) fmt.Println(v) // 能够获取所有属性 // 获取构造体字段个数:t.NumField() for i := 0; i < t.NumField(); i++ { // 取每个字段 f := t.Field(i) fmt.Printf("%s : %v", f.Name, f.Type) // 获取字段的值信息 // Interface():获取字段对应的值 val := v.Field(i).Interface() fmt.Println("val :", val) } fmt.Println("=================办法====================") for i := 0; i < t.NumMethod(); i++ { m := t.Method(i) fmt.Println(m.Name) fmt.Println(m.Type) }}func main() { u := User{1, "zs", 20} Poni(u)}查看匿名字段package mainimport ( "fmt" "reflect")// 定义构造体type User struct { Id int Name string Age int}// 匿名字段type Boy struct { User Addr string}func main() { m := Boy{User{1, "zs", 20}, "bj"} t := reflect.TypeOf(m) fmt.Println(t) // Anonymous:匿名 fmt.Printf("%#v\n", t.Field(0)) // 值信息 fmt.Printf("%#v\n", reflect.ValueOf(m).Field(0))}批改构造体的值package mainimport ( "fmt" "reflect")// 定义构造体type User struct { Id int Name string Age int}// 批改构造体值func SetValue(o interface{}) { v := reflect.ValueOf(o) // 获取指针指向的元素 v = v.Elem() // 取字段 f := v.FieldByName("Name") if f.Kind() == reflect.String { f.SetString("kuteng") }}func main() { u := User{1, "5lmh.com", 20} SetValue(&u) fmt.Println(u)}调用办法package mainimport ( "fmt" "reflect")// 定义构造体type User struct { Id int Name string Age int}func (u User) Hello(name string) { fmt.Println("Hello:", name)}func main() { u := User{1, "5lmh.com", 20} v := reflect.ValueOf(u) // 获取办法 m := v.MethodByName("Hello") // 构建一些参数 args := []reflect.Value{reflect.ValueOf("6666")} // 没参数的状况下:var args2 []reflect.Value // 调用办法,须要传入办法的参数 m.Call(args)}获取字段的tagpackage mainimport ( "fmt" "reflect")type Student struct { Name string `json:"name1" db:"name2"`}func main() { var s Student v := reflect.ValueOf(&s) // 类型 t := v.Type() // 获取字段 f := t.Elem().Field(0) fmt.Println(f.Tag.Get("json")) fmt.Println(f.Tag.Get("db"))}实例办法package commonimport ( "errors" "reflect" "strconv" "time")//依据构造体中sql标签映射数据到构造体中并且转换类型func DataToStructByTagSql(data map[string]string, obj interface{}) { objValue := reflect.ValueOf(obj).Elem() for i := 0; i < objValue.NumField(); i++ { //获取sql对应的值 value := data[objValue.Type().Field(i).Tag.Get("sql")] //获取对应字段的名称 name := objValue.Type().Field(i).Name //获取对应字段类型 structFieldType := objValue.Field(i).Type() //获取变量类型,也能够间接写"string类型" val := reflect.ValueOf(value) var err error if structFieldType != val.Type() { //类型转换 val, err = TypeConversion(value, structFieldType.Name()) //类型转换 if err != nil { } } //设置类型值 objValue.FieldByName(name).Set(val) }}//类型转换func TypeConversion(value string, ntype string) (reflect.Value, error) { if ntype == "string" { return reflect.ValueOf(value), nil } else if ntype == "time.Time" { t, err := time.ParseInLocation("2006-01-02 15:04:05", value, time.Local) return reflect.ValueOf(t), err } else if ntype == "Time" { t, err := time.ParseInLocation("2006-01-02 15:04:05", value, time.Local) return reflect.ValueOf(t), err } else if ntype == "int" { i, err := strconv.Atoi(value) return reflect.ValueOf(i), err } else if ntype == "int8" { i, err := strconv.ParseInt(value, 10, 64) return reflect.ValueOf(int8(i)), err } else if ntype == "int32" { i, err := strconv.ParseInt(value, 10, 64) return reflect.ValueOf(int64(i)), err } else if ntype == "int64" { i, err := strconv.ParseInt(value, 10, 64) return reflect.ValueOf(i), err } else if ntype == "float32" { i, err := strconv.ParseFloat(value, 64) return reflect.ValueOf(float32(i)), err } else if ntype == "float64" { i, err := strconv.ParseFloat(value, 64) return reflect.ValueOf(i), err } //else if .......减少其余一些类型的转换 return reflect.ValueOf(value), errors.New("未知的类型:" + ntype)}调用package mainimport ( "fmt" "github.com/student/1129/common")//Product Product定义一个构造体type Product struct { ID int64 `json:"id" sql:"id"` ProductClass string `json:"ProductClass" sql:"ProductClass"` ProductName string `json:"ProductName" sql:"productName"` ProductNum int64 `json:"ProductNum" sql:"productNum"` ProductImage string `json:"ProductImage" sql:"productImage"` ProductURL string `json:"ProductUrl" sql:"productUrl" `}func main() { //这块是模仿mysql获取单条的数据反射到构造体 data := map[string]string{"id": "1", "ProductClass": "blog", "productName": "5lmh.com", "productNum": "40", "productImage": "http://www.5lmh.com/", "productUrl": "http://www.5lmh.com/"} productResult := &Product{} common.DataToStructByTagSql(data, productResult) fmt.Println(*productResult) //这块是模仿mysql获取所有的数据反射到构造体 Alldata := []map[string]string{ {"id": "1", "ProductClass": "blog", "productName": "5lmh.com", "productNum": "40", "productImage": "http://www.5lmh.com/", "productUrl": "http://www.5lmh.com/"}, {"id": "2", "ProductClass": "blog", "productName": "5lmh.com", "productNum": "40", "productImage": "http://www.5lmh.com/", "productUrl": "http://www.5lmh.com/"}, } var productArray []*Product for _, v := range Alldata { Allproduct := &Product{} common.DataToStructByTagSql(v, Allproduct) productArray = append(productArray, Allproduct) } for _, vv := range productArray { fmt.Println(vv) }}

May 24, 2021 · 4 min · jiezi

关于git:根据地理位置来获取最近的商家

后盾录入经纬度http://lbs.amap.com/api/javas... <img src='https://gitee.com/smallsha/upic/raw/master/uPic/clipboard的正本.png' alt='clipboard的正本'/> ①首先采纳微信或者是腾讯地图拉取到用户以后的经纬度http://lbsyun.baidu.com/index... 基于浏览器定位 ②调用 squarePoint来获取 define('EARTH_RADIUS', 6378.137);//地球半径public function squarePoint($lng, $lat, $distance = 0.5){ $dlng = 2 * asin(sin($distance / (2 * EARTH_RADIUS)) / cos(deg2rad($lat))); $dlng = rad2deg($dlng); $dlat = $distance / EARTH_RADIUS; //EARTH_RADIUS地球半径 $dlat = rad2deg($dlat); return array( 'left-top' => array('lat' => $lat + $dlat, 'lng' => $lng - $dlng), 'right-top' => array('lat' => $lat + $dlat, 'lng' => $lng + $dlng), 'left-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng - $dlng), 'right-bottom' => array('lat' => $lat - $dlat, 'lng' => $lng + $dlng) );}③条件判断 进行sql查问 ...

May 24, 2021 · 2 min · jiezi

关于git:Git-使用技巧

间接提交以后分支git add . && git commit -m ‘评估测试’ && git pull origin `git branch | sed -n "/\* /s///p"` && git push origin `git branch | sed -n "/\* /s///p"`coding 没有配置ssh,应用账号密码clonegit clone http://yourname:password@git.... https 上传o 创立分支http://blog.csdn.net/guang11c... 操作分支https://www.liaoxuefeng.com/w... 分支合并https://www.cnblogs.com/mengd... 精品 git 操作流程https://blog.csdn.net/zzh9206...版本回退 git log --pretty=oneline 查看git branch ----->git checkout ----> git reflog ---> git reset --hard HEAD@{0} 删除近程分支 git branch -r ---->git branch -r -d 清空缓存 能够让暂存区的文件删除了 .gitignoregit rm -r --cache .常见问题git merge origin/master --allow-unrelated-histories ...

May 24, 2021 · 2 min · jiezi

关于git:无linux基础也能熟练掌握git的基本操作

git是一个用来治理我的项目的工具,它的近程仓库有github、gitee、gitlab代码托管核心,既能够用于集体共享代码,又能够用于团队进行我的项目的合作与公布,那么咱们一起来理解一下git该如何应用~ git在在本地电脑是分成三局部的,工作区,暂存区和本地库,每一个区域的作用如下 首先,想要应用git来治理咱们的我的项目,那本地必然是有git环境,装置完git之后,在任何中央都能够右键 git bash here 来关上命令行窗口, 找到一个适合的文件夹,把它当作git的仓库,应用 git init // 初始化我的项目此时,文件夹里有一个 .git 文件,这代表git的初始化实现了。 仓库初始化实现,如果没有我的项目,那git就没有用武之地,那咱们接着先创立一个hello.txt,此时外面写了一些我的项目的形容。一旦创立、批改的文件都是在git的本地区的。首先咱们须要将它提交到暂存区、再提交到本地库,这样能力对该文件的各个版本进行治理,更好的对我的项目进行迭代、更新、回退,那么就须要以下这些指令 git config --global user.name alice    // 全局下设置用户名, 只需设置一次git config --global user.email alice@hello.com // 全局下设置用户邮箱, 只需设置一次git status  // 查看本地文件的状态,红色示意在工作区文件有新增/批改,绿色示意在暂存区文件有新增/批改git add . // 应用.示意提交所有文件, 也能够写上具体提交文件git commit -m "add file" // ""示意的是备注信息 批改和新增所作的操作是一样的,git命令行工具的提醒会有不同,当文件屡次提交到本地库之后,本地库对于该文件的记录就会有多条,此时咱们可能想要看一下总共提交了多少个版本,能够通过以下形式查看历史记录 git log  // 将残缺的历史记录展现进去, 包含工夫、作者以及提交的备注信息git log --pretty=oneline // 将历史记录以一行展现git log --oneline  // 将历史记录以一行展现, 同时截取代表文件的前七位哈希值git log reflog   // 将历史记录以一行展现, 截取代表文件的前七位哈希值, HEAD@{0}示意以后地位 如果某次批改出了bug,须要回退代码,那么能够用以下的形式 git reset [回退形式] [版本]回退形式有以下几种--hard 代表工作区暂存库和本地区都回退--mixed 代表将暂存区和本地库的版本回退,此时输出 git status 查看文件状态时,提醒文字会标为红色,因为工作区和暂存区的文件不统一了--soft 代表只将工作区的版本回退,此时输出 git status 查看文件状态时,提醒文字会标为绿色,因为工作区与暂存区的文件统一,只是暂存区和本地库版本不统一版本有以下几种形式(1) 间接应用代表版本的哈希值(2) HEAD代表的是以后版本,通过^来示意向前一个版本, 多少个^代表向前回退多少个版本(3) 通过~加上数字来示意向前n个版本  ...

May 22, 2021 · 1 min · jiezi

关于git:拜托别瞎提交代码了看人家-Git-提交规范那叫一个舒服

git是当初市面上最风行的版本控制工具,书写良好的commit message能大大提高代码保护的效率。然而在日常开发中因为短少对于commit message的束缚,导致填写内容随便、品质参差不齐,可读性低亦难以保护。在我的项目中引入commit message标准已是火烧眉毛。 用什么标准?当初市面上比拟风行的计划是约定式提交标准(Conventional Commits),它受到了Angular提交准则的启发,并在很大水平上以其为根据。约定式提交标准是一种基于提交音讯的轻量级约定。它提供了一组用于创立清晰的提交历史的简略规定;这使得编写基于标准的自动化工具变得更容易。这个约定与SemVer相吻合,在提交信息中形容新个性、bug 修复和破坏性变更。它的 message 格局如下: <类型>[可选的作用域]: <形容>[可选的注释][可选的脚注]Quick Start1.全局装置commitizen & cz-conventional-changelogcommitizen是一个撰写合格commit message的工具,用于代替git commit 指令,而cz-conventional-changelog适配器提供conventional-changelog规范(约定式提交规范)。基于不同需要,也能够应用不同适配器。 npm install -g commitizen cz-conventional-changelogecho '{ "path": "cz-conventional-changelog" }' > ~/.czrc装置结束后,可间接应用git cz来取代git commit。 全局模式下,须要 ~/.czrc 配置文件, 为commitizen指定Adapter。 2.我的项目内装置commitlint & huskycommitlint负责用于对commit message进行格局校验,husky负责提供更易用的git hook。 Use npmnpm i -D husky @commitlint/config-conventional @commitlint/cliUse yarnyarn add husky @commitlint/config-conventional @commitlint/cli -Dcommitlint只能做格局标准,无奈涉及内容。对于内容品质的把控只能靠咱们本人。 3. 增加相应配置创立commitlint.config.js # In the same path as package.jsonecho 'module.exports = {extends: ["@commitlint/config-conventional"]};' > ./commitlint.config.js引入husky# package.json...,"husky": { "hooks": { "commit-msg": "commitlint -e $GIT_PARAMS" }}4. 应用执行git cz进入interactive模式,依据提醒顺次填写 ...

May 21, 2021 · 1 min · jiezi

关于git:Mac-在本地配置2个git账号的ssh密钥

通常,咱们用公司的邮箱是一个git账号,同时有可能你须要另一个github账号来更新github上的内容,此时便须要进行两个账号的配置。通常,咱们用公司的邮箱是一个git账号,同时有可能你须要另一个github账号来更新github上的内容,此时便须要进行两个账号的ssh密钥进行配置。 首先进入目录: cd ~/.sshls 能够发现曾经有一个ssh key了生成你第二个账号(github)的ssh key: ssh-keygen -t rsa -C "test@emal.con"输出命令之后,会提醒你填写新的文件名,此时须要输出新的文件名即可,例如:id_rsa_personal 复制其中的内容到对应平台增加私钥的中央 cat ~/.ssh/id_rsa_personal.pub如果目录中没有config文件的话,新建config文件: touch config输出内容 #Default accountHost xxx.xxx.comHostname xxx.xxx.comIdentityFile ~/.ssh/id_rsa#New accountHost github.com Hostname github.comIdentityFile ~/.ssh/id_rsa_personal如果目录里曾经有了config文件,只需在文件开端增加 #New account 前面的内容。 启动ssh-agent服务 $ eval "$(ssh-agent -s)"Agent pid 2429在ssh-agent服务中把刚刚新增的ssh-key增加进去 $ ssh-add ~/.ssh/id_rsa_personalIdentity added: /Users/xxx/.ssh/id_rsa_personal(xxx@email.com)8.到此曾经配置胜利,能够应用命令测试一下 ssh -T git@github.com

May 19, 2021 · 1 min · jiezi

关于git:Git-中的常用命令

根底命令git help <command>: 获取 git 命令的帮忙信息git init: 创立一个新的 git 仓库,其数据会寄存在一个名为 .git 的目录下git status: 显示以后的仓库状态git add <filename>: 增加文件到暂存区git commit: 创立一个新的提交 如何编写良好的提交信息为何要编写良好的提交信息git log: 显示历史日志git log --all --graph --decorate: 可视化历史记录(有向无环图)git diff <filename>: 显示与暂存区文件的差别git diff <revision> <filename>: 显示某个文件两个版本之间的差别git checkout <revision>: 更新 HEAD 和目前的分支分支与合并git branch: 显示分支git branch <name>: 创立分支git checkout -b <name>: 创立分支并切换到该分支相当于 git branch <name>; git checkout <name>git merge <revision>: 合并到以后分支git mergetool: 应用工具来解决合并抵触git rebase: 将一系列补丁变基(rebase)为新的基线远端操作git remote: 列出远端git remote add <name> <url>: 增加一个远端git push <remote> <local branch>:<remote branch>: 将对象传送至远端并更新远端援用git branch --set-upstream-to=<remote>/<remote branch>: 创立本地和远端分支的关联关系git fetch: 从远端获取对象/索引git pull: 相当于 git fetch; git mergegit clone: 从远端下载仓库撤销git commit --amend: 编辑提交的内容或信息git reset HEAD <file>: 复原暂存的文件git checkout -- <file>: 抛弃批改Git 高级操作git config: Git 是一个高度可定制的工具git clone --depth=1: 浅克隆(shallow clone),不包含残缺的版本历史信息git add -p: 交互式暂存git rebase -i: 交互式变基git blame: 查看最初批改某行的人git stash: 临时移除工作目录下的批改内容git bisect: 通过二分查找搜寻历史记录.gitignore文件: 指定成心不追踪的文件

May 14, 2021 · 1 min · jiezi

关于git:你真的会用-Git-吗Git-中的数据结构与对应伪代码

Git 领有一个通过精心设计的模型,这使其可能反对版本控制所需的所有个性,例如保护历史记录、反对分支和促成合作。然而,通过自顶向下的形式(从命令行接口开始)学习 Git 可能会让人感到十分困惑。一旦呈现问题,就只能将当前工作保留下来,而后从新复制一份工作,持续进行解决了。如果咱们可能先对其底层的数据结构有所理解,在接触命令行接口时,就会更加得心应手。 快照Git 将顶级目录中的文件和文件夹作为汇合,并通过一系列快照来治理其历史记录。在 Git 的术语里,文件被称作 Blob对象(数据对象),也就是一组数据。目录则被称之为“树”,它将名字与 Blob 对象或树对象进行映射(使得目录中能够蕴含其余目录)。快照则是被追踪的最顶层的树,快照也被称为提交(commit)。 历史记录建模:关联快照在 Git 中,历史记录是一个由快照组成的有向无环图。每个快照都有一系列的“父辈”,也就是其之前的一系列快照。留神,快照可能同时有多个“父辈”,例如,通过合并后的两条分支。 o <-- o <-- o <-- o <---- o ^ / \ v --- o <-- o数据模型及其伪代码示意通过伪代码的示意,可能更加清晰的理解 Git 的数据模型。 // 文件就是一组数据type blob = array<byte>// 一个蕴含文件和目录的目录type tree = map<string, tree | blob>// 每个提交都蕴含一个父辈,元数据和顶层树type commit = struct { parent: array<commit> author: string message: string snapshot: tree}对象和内存寻址Git 中的对象能够是 blob、树或提交:type object = blob | tree | commit,所有的对象都会通过 SHA-1 哈希进行寻址。 ...

May 14, 2021 · 1 min · jiezi

关于git:使用Gitee作为代码仓库

一、上传代码到Gitee1、新建Gitee仓库点击新建仓库,填写信息 2、上传本地代码2.1 复制Gitee仓库地址 2.2 在本地文件夹进行下载git clonegit clone 复制的gitee仓库地址 2.3 下载实现后,把想要上传的本地代码增加到该目录 2.4 鼠标右键点击Git Bash Here因为是在git clone状况下进行代码提交,这里不必git init初始化,间接用git add . 命令通知Git,把我的项目下的文件增加到仓库通过git status命令,查看下当初的状态用git commit命令通知Git,把文件提交到仓库用git push -u origin master命令合并分支,推送代码// 总的代码// 其中add + 空格 + .git add .git commit -m "第一次提交"git remote add origin git仓库地址git push -u origin master 遇到的问题一:failed to push some refs to https://gitee.com/xxxx/xxxx.git // 应用以下命令,这是本地的代码和近程仓库的代码不统一导致的应用git pull --rebase origin master遇到的问题二:You do not have permission to pull the repository,可能是没有上传到他人代码仓库的权限,参照第二步增加完权限后,再输出git push -u origin master ...

May 14, 2021 · 1 min · jiezi

关于git:git常用命令

配置git主动保留用户名和明码 git config --global credential.helper store抛弃本地批改,并更新代码 git fetch --allgit reset --hard origin/master

May 13, 2021 · 1 min · jiezi

关于git:Git-清除历史已提交文件永久删除文件

Git 革除历史已提交文件、永恒删除文件需要剖析因为不小心提交了配置文件到github中,我尝试在.gitignore中增加过滤文件,可也只是在以后commit中删除了,历史提交的还是存在的,所以采纳如下办法 step 1git filter-branch --force --index-filter "git rm -rf --cached --ignore-unmatch filename" --prune-empty --tag-name-filter cat -- --allstep2rm -rf .git/refs/original && git reflog expire --expire=now --allgit gc --prune=nowstep 3git push --force参考文章https://blog.csdn.net/fcymk2/...

May 13, 2021 · 1 min · jiezi

关于git:Git-这样回退代码才足够优雅

从接触编程就开始应用 Git 进行代码治理,先是本人玩 Github,又在工作中应用 Gitlab,尽管应用工夫挺长,可是也只进行一些罕用操作,如推拉代码、提交、合并等,更简单的操作没有应用过,看过的教程也逐步淡忘了,有些对不起 Linus 大神。 进去混总是要还的,前些天就遇到了 Git 里一种非常糟心的场景,并为之前没有深刻了解 Git 命令付出了一下午工夫的代价。 先介绍一下这种场景,咱们一个我的项目从 N 版本升到 A 版本时引入了另一项目标 jar 包,又陆续公布了 B、C 版本,但在 C 版本后突然发现了 A 版本引入的 jar 包有极大的性能问题,B、C 版本都是基于 A 版本公布的,要修复 jar 包性能问题,等 jar 包再发版还得几天,可此时线上又有紧急的 Bug 要修,于是就陷入了进退维谷的地步。 最初决定先将代码回退到 A 版本之前,再基于旧版本修复 Bug,也就开始了五个小时的受苦之路。 根底试探 revert 首先必定的是 revert,git revert commit_id 能产生一个 与 commit_id 齐全相同的提交,即 commit_id 里是增加, revert 提交里就是删除。 然而应用 git log 查看了提交记录后,我就打消了这种想法,因为提交次数太多了,中途还有几次从其余分支的 merge 操作。”利益于”咱们不太洁净的提交记录,要实现从 C 版本到 N 版本的 revert,我须要倒序执行 revert 操作几十次,如果其中程序错了一次,最终后果可能就是不对的。 另外咱们晓得咱们在进行代码 merge 时,也会把 merge 信息产生一次新的提交,而 revert 这次 merge commit 时须要指定 m 参数,以指定 mainline,这个 mainline 是主线,也是咱们要保留代码的主分支,从 feature 分支往 develop 分支合并,或由 develop 分支合并到 master 的提交还好确定,但 feature 分支相互合并时,我哪晓得哪个是主线啊。 ...

May 12, 2021 · 2 min · jiezi

关于git:git简单学习

我其实不大喜爱用git bash,习惯了可视化的操作工作.可是,我Git的用的不熟归不熟,你说我不会就过分了吧. 搞得老板认为我真的不会,还被谈话. git add 文件名 Git增加文件,增加到暂存区git commit -m "提交的备注,个别都会写做了什么事" Git提交文件到以后分支, -m就是备注git status 查看状态,比方哪个文件批改了git diff 文件名 查看文件批改前后的比拟;我更喜爱用小乌龟,而后配合Beyondcompare,清晰明了git log 查看日志,我还是喜爱小乌龟,不仅能够看日志,还能双击用Beyondcompare比拟 git reset --hard HEAD^ 回退版本,HEAD代表以后版本,HEAD^上一个版本,HEAD^^上两个版本,HEAD~100上100个版本 git reset --hard 版本号 到哪一个版本git reflog 你的每一次命令 能够用来查找版本号git checkout -- 文件名 撤销最近的更改, 肯定要有--,不然就是切换分支git rm 文件名 删除暂存库的文件git remote add origin 近程仓库地址 git增加近程仓库 origin能够换成其余名字git push 仓库名(可选) 分支名(可选) 将本地分支推送到近程仓库,可用来建设近程分支git remote (-v可选) 查看近程仓库信息git remote rm 仓库名 删除近程仓库(非实在删除,只是解除绑定关系)git clone 近程仓库地址 文件夹名称(可选,就会clone进这个文件内)git branch 查看分支以及以后分支git checkout -b 分支名 创立新的分支,并切换到新的分支git branch 分支名 创立新的分支git checkout 分支名 切换分支git merge 分支名 合并到以后分支,例如以后分支是master,git merge dev就是把dev合并到master上git branch -d 分支名 删除分支git push 仓库名 --delete 分支名 删除近程仓库的分支git switch -c dev 切换分支,据说是新的命令,更加语义化git stash 储藏现有更改(就是先暗藏起来)git stash list 储藏列表git stash apply 储藏的id 将某个储藏项显示进去git stash drop 删掉储藏git stash pop 先显示储藏再删除git cherry-pick 提交的id 抉择某次的更改合并到以后分支并提交git branch -D 分支名 大写的D示意强制删除git pull 拉取近程仓库内容到本地git checkout -b 分支名 仓库名/分支名 创立近程仓库的某个分支到本地git branch --set-upstream-to=仓库名/分支名 分支名 将本地分支与某个近程仓库的分支建设链接git tag 标签名 增加标签git tag 查看标签git tag 标签名 提交的id 针对某次的提交打个标签git show 标签名 查看标签信息git tag -d 标签名 删除标签 git push 近程仓库 标签名 推送标签到近程仓库git push 近程仓库 --tags 推动所有标签到近程仓库git push 近程仓库:refs/tags/标签名 先删除本地标签,再删除近程仓库的标签 ...

May 11, 2021 · 1 min · jiezi

关于git:git-本地仓库同时推送到多个远程仓库

应用git把一个本地仓库同时push到多个近程仓库 1. 首先须要别离新建近程仓库本次次要同时push到gitee和github; 2. 从github拉取代码到本地# 从github拉取代码到本地$ git clone https://github.com/dragonishare/totoro.git# 查看本地仓库关联的近程仓库状况$ git remote -vorigin https://github.com/dragonishare/totoro.git (fetch)origin https://github.com/dragonishare/totoro.git (push)3. 增加新的近程仓库通过git remote set-url --add 别名 仓库地址增加新的近程仓库 $ git remote set-url --add origin https://gitee.com/dragonishare/totoro.git# 查看本地仓库关联的近程仓库状况$ git remote -vorigin https://github.com/dragonishare/totoro.git (fetch)origin https://github.com/dragonishare/totoro.git (push)origin https://gitee.com/dragonishare/totoro.git (push)github和gitee都应用默认的近程版本库名称origin,不便同时推送 4. 留神本地仓库能够同时推送到github和gitee,但只能从github拉取 5. 能够通过间接批改.git/config文件来实现同样的性能# 找到remote origin,增加url = 仓库地址[remote "origin"] url = https://github.com/dragonishare/totoro.git fetch = +refs/heads/*:refs/remotes/origin/* url = https://gitee.com/dragonishare/totoro.git

May 11, 2021 · 1 min · jiezi

关于git:Git-Commit-Message-应该怎么写

因为入职至今,公司也没有太规定一个代码提交标准,所以始终以来,我代码提交的commit message都是简略的一句话阐明了本次代码改变内容,有时候会更加精简。 但工夫长了之后,当我须要回头找一下某次提交记录的时候,就会发现不太好找,首先没有一个具体的分类,比方是增加性能、还是修复bug、还是更新文档等等;其次就是有一些message写得不是很清晰,不太能一眼明了那次改变是什么内容。 起初决定,须要从新学一学对于commit message的写法标准。 Commit Message的益处每一条提交记录的message可能提供更多的无效信息,不便咱们疾速浏览;能够应用git log --grep <keyword>过滤掉某些commit,便于疾速查找信息;能够间接从commit生成Change log。Commit Message格局目前Commit Message标准应用较多的是Angular团队的标准,继而衍生了Conventional Commits sepcification。 Commit Message包含三个局部:Header、Body和Footer。格局如下: <type>(<scope>): <subject>< 空一行 ><body>< 空一行 ><footer>其中,Header是必填的,Body和Footer能够省略不写。 HeaderHeader蕴含三个局部:type、scope和subject。其中scope是可选项。 <type>(<scope>): <subject># examplefeat($route): add support for the `reloadOnUrl` configuration optiontypetype是用于阐明commit的类别,具体的标识如下: feat: 一个新的性能(feature);fix:修复bug;docs:批改文档,比方README.md、CHANGELOG.md等;style: 批改代码的格局,不影响代码运行的变动,比方空格、格式化代码、补齐句末分号等等;refactor: 代码的重构,没有新性能的增加以及bug修复的代码改变;perf:优化代码以进步性能;test:减少测试或优化改善现有的测试;build:批改影响我的项目构建文件或内部依赖项,比方npm、gulp、webpack、broccoli等;ci:批改CI配置文件和脚本;chore:其余非src门路文件和测试文件的批改,比方.gitignore、.editorconfig等;revert:代码回退;scopescope是用于阐明commit的影响范畴,比方数据层、管制层、视图层等等,视我的项目不同而不同。 如果你的批改影响了不止一个scope,就能够应用*代替。 subjectsubject是commit的目标简略形容,不超过50个字符,结尾不须要句号。 BodyBody局部是对本次commit的详细描述,能够分为多行。 Body局部应该阐明代码变动的动机,以及与以前行为的比照。 More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. Further paragraphs come after blank lines.- Bullet points are okay, too- Use a hanging indentFooterFooter局部次要用于两种状况:不兼容变动和解决Issue。 ...

May 10, 2021 · 2 min · jiezi

关于git:git-pull拉取报错

git pull的时候发生冲突的解决办法之error: Your local changes to the following files would be overwritten by merge 办法1:如果你想保留方才本地批改的代码,并把git服务器上的代码pull到本地(本地方才批改的代码将会被临时封存起来)如此一来,服务器上的代码更新到了本地,而且你本地批改的代码也没有被笼罩,之后应用add,commit,push 命令即可更新本地代码到服务器了。 git stash git commit git stash pop办法2: 放弃本地批改,间接笼罩 git reset --hard git pull

May 7, 2021 · 1 min · jiezi

关于git:git如何解决冲突master分支的上的冲突

git是什么就不废话了 呈现以下状况怎么解决? 有个index.ts文件 export const ENV = { mode: 'Production', baseUrl: '/api/web/v1', iotUrl: '/iot/web/v1',};共事A提交并批改了index.ts,共事B本地也在批改index.ts,并且改的是同一个中央;当共事B提交本人的本地代码时候却发现提交不下来; 共事A批改文件如下:(批改了basrurl的内容) export const ENV = { mode: 'Production', baseUrl: 'api', iotUrl: '/iot/web/v1',};共事B批改文件如下:(同样也批改了basrurl的内容) export const ENV = { mode: 'Production', baseUrl: '/api/web/v1/user', iotUrl: '/iot/web/v1',};这时候当共事B提交本人代码时候,就有了抵触; 解决放法: 首先,先吧近程master的代码git merge master到本地master,而后git pul origin master 而后咱们看下工作环境,git status 这里说是这个文件同时被批改;咱们能够git diff看一下 <<<<<<和>>>>>>之间就是抵触的中央,删掉须要的就行了。 而后就能够进行提交了 这样就好了!!

May 7, 2021 · 1 min · jiezi

关于git:git-配置及常用命令

$ git config --global --list # 查看全局配置$ git config --local --list # 查看本我的项目配置$ git config --global user.name hoby # 批改提交名$ git config --global alias.br branch # 批改简写$ git config --global core.ignorecase false # 敞开疏忽大小写$ git config --unset alias.name # 默认删除以后我的项目配置,--global删除全局1、$ git config --global --list #查看以后配置 未配置,则执行以下命令进行配置: 1.设置账号和邮箱   git config --global user.name "自已的用户名"    例:git config --global user.name "fenlin"    git config --global user.email "本人的邮箱"     例:git config --global user.email "****@163.com"2.查看秘钥是否存在(第一次增加可能不存在能够间接下一步)   cd ~/.ssh3.生成秘钥   ssh-keygen -t rsa -C "本人的邮箱与下面邮箱统一" 按三次回车   例: ssh-keygen -t rsa -C "***@163.com"4.查看秘钥,并复制到码云或github的ssh里  cat ~/.ssh/id_rsa.pub切换分支 ...

May 6, 2021 · 1 min · jiezi

关于git:GIT使用指南

配置相干git config [--local] [--global] user.name 'name'git config [--local] [--global] user.email 'email'// 设置明码过期工夫git config credential.helper 'cache --timeout=3600'// 保留明码永不过期git config --global credential.helper store// 查看所有配置git config --list [--local] [--global] [--system]// 革除配置git config --unset 在windows下全局配置存储地位为 C:\User\用户名\.gitconfig创立repositorygit init your_git_repo// 或者在当前目录中间接git init文件重命名和删除git mv nameBefore nameAftergit rm fileToBeDeleted工作区增加到暂存区 暂存区进行commit// 将文件的批改和新建增加到暂存区git add .// 将文件的批改,新建和删除增加到暂存区git add -Agit add -all// 将文件的批改和删除增加到暂存区git add -ugit commit -m'commit message'查看历史commitgit log git log -3// 简洁显示git log --onelinegit log -3 --oneline // 查看所有branch的commit历史git log -a // 命令行图形化 intersting 感觉看的不分明git log --all --graph// 图形化gitk --all分支相干创立分支 ...

May 6, 2021 · 1 min · jiezi

关于git:痛痛痛我们的好兄弟Git一路走好

文章是正经文章,题目不要在意,哈哈Git作为当初支流的版本控制工具,然而如何在软件开发过程中进行正当的分支治理是一个见仁见智的问题。 接下来我会比照下现有的几种比拟广泛的分支治理形式和之前在阿里时候应用Aone的区别。 Git Flow先看一张图片,这张图片来自Vincent在2010年提出的计划,完满的诠释了Git Flow的工作模式。 作为曾经提出了10多年的模式,Git Flow相对来说还算是比较简单的。 稳固的分支就两个:develop和master,这两个分支是不会被删除的,master对应稳固的版本,develop则是用于日常开发的稳固版本。 其余的feature、release、hotfix分支都是用完即删。 feature分支是每个人的开发分支,有新的需要都应该基于develop拉出feature分支进行开发。 release分支则是用于测试和公布的分支。 hotfix用于紧急的bug修复。 开发流程如下: 最开始的时候咱们创立好了master分支,而后基于master分支创立出了develop分支而后A和B同时基于某个版本的develop分支拉出代码进行开发,分支别离叫做feature-A和feature-B如果开发过程中须要修复bug上线,那么就从master拉个分支进去,命名为hotfix-xxx进行修复,修复实现之后合并到develop和master,而后hotfix分支删除而后A代码撸的比拟快,先一步实现了开发,feature-A分支的代码就合并到develop,feature分支被删除,而后咱们基于develop新建一个release-A分支进行测试测试过程中如果发现问题那么咱们就在release分支修复,把修复的代码合并到develop去release-A一旦测试实现上线,就把代码合并到master和develop,release分支被删除这时候B总算把需要开发完了,而后也依照合并到develop,再新建release-B,合并到master和develop的过程来一遍对于理论利用也比较简单,对于Mac咱们能够间接用最不便的形式进行装置。 首先,装置Git Flow,brew install git-flow-avh,装置好之后执行git flow init就会进行初始化,能够输出你的master和develop分支名字,而后设置其余几个默认分支的前缀。 而后执行git flow feature start irving就能够初始化创立一个feature分支进行开发,默认咱们能够看到是基于develop来创立的。 如果开发实现,咱们执行命令git flow feature finish irving,而后咱们的开发分支就主动合并到了develop,并且开发分支曾经被删除。 接着咱们的分支须要提测和公布,执行命令git flow release start irving,如果修复bug就间接在这下面修复。 测试实现之后,执行命令git flow release finish irving,代码将会被合并到master和develop,而后分支被删除。 原理和实现形式都说了,那么这个模式其实还是一样的问题,就是他比拟适宜固定版本的迭代开发,对于互联网不要脸的每天都要发版,每天10几个需要都要上线来说未免太难了。 develop分支我明天有10个需要,8个要上线,2个不上,代码还有先后顺序依赖之类的,这就没法玩好不好,然而他提供了一个比拟好的标准和思路。 Github FlowGithub Flow能够说非常简单了,它的提出是在2011年,次要就是针对Git Flow。 它就是基于master分支拉一个分支进去开发,而后能够在新的分支中进行开发,实现之后提交pull request,如果承受之后就合并代码部署了。 具体能够看官网介绍。 这个形式简略是简略,然而在很多公司的业务开发过程中个别都有开发、测试、预发、生产几个环境,没有强有力的工具来撑持,我认为很难用这种简略的模式来实现治理。 我感觉这种模式特地适宜小团队,人少,需要少,那就很容易了。 Trunk-Based这个模型提出的工夫更晚一点,是在2013年Paul Hammant提出的计划。 看图根本就能明确,这不就是SVN的模式嘛,骨干trunk开发,拉出新的分支进行开发部署、修复BUG。 用过的计划咱们之前用过一个计划,和Git Flow比拟相似,然而不依赖工具的反对,更多的是依附团队自身的约定和标准。 对于开发、测试、预发、生产别离应用分支develop、test、release、master分支,其中master分支作为稳固分支,不能间接提交代码,同时这几个分支是固定惟一的分支。 首先开发阶段,大家都须要基于master创立最新的性能开发分支,命名为feature/xxx。 如果须要公布到开发环境,所有人的代码都须要合并到develop,并且只能用develop分支进行公布开发环境。 如果开发实现,须要提测的分支合并到test分支,那些还在开发阶段的就在develop好了。 测试实现之后须要公布预发(当然叫灰度、uat都行),就把代码合并到release进行公布。 ...

April 29, 2021 · 1 min · jiezi

关于git:采用git标签来进行代码版本管理

为什么要应用git标签随着大规模微服务开发的倒退,各个微服务之间的相互依赖总会思考版本的问题。以前咱们采纳不同的分支来临时解决这个问题,然而对分支的迭代偶然会引入不兼容的更改,产生不可意料的问题。应用git标签,能够将咱们依赖的某个微服务的版本限定到某个确定的commitID 而不是某个常常会迭代的分支。配合语义化版本的引入,咱们能够轻松的解决版本依赖的问题 如何给某个commentID 打 tag命令阐明git tag查看所有标签,按 q 退出git tag -l <tagname>查看指定标签git tag <tagname>在以后分支的最新HEAD上创立轻量级标签:tagnamegit tag <tagname> <commitID>为对应的某个commitID打标签git tag -a <tagname> -m <comment>为标签 tagname 减少阐明 commentgit show <tagname>查看标签:tagname 的内容git tag -d <tagname>删除标签:tagname推送标签内容到远端命令阐明git push origin --tags推送所有标签到远端git push origin <tagname>推送指定标签到远端git push origin :refs/tags/<tagname>删除远端指定标签如何疾速回滚到某个 tag$git reset <tagname>如何疾速切换到某个 tag$git checkout <tagname>为什么网上的很多开源我的项目只有master分支呢版本治理能够借助git的tag来实现。然而,在开发过程中,不可能每次批改都打标签而后公布。 理论开发中,个别会有一个dev分支,作为开发版本分支。在没有实现此次开发工作前,所有的代码都是合并到dev分支。 当实现了开发工作,管理者会将dev分支合并到master分支,而后删除dev分支,并且通过打标签来公布版本。 这就是为什么很多放弃保护的大型开源我的项目只有master分支的起因。 参考:https://segmentfault.com/a/11...

April 29, 2021 · 1 min · jiezi

关于git:最新最全最详细的-Git-学习笔记总结2021最新版

Git 简介Git 是一个开源的分布式版本控制系统。 什么是版本控制?版本控制是一种记录一个或若干文件内容变动,以便未来查阅特定版本订正状况的零碎。 什么是分布式版本控制系统?介绍分布式版本控制系统前,有必要先理解一下传统的集中式版本控制系统。 集中化的版本控制系统,诸如 CVS,Subversion 等,都有一个繁多的集中管理的服务器,保留所有文件的订正版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。 这么做最不言而喻的毛病是地方服务器的单点故障。如果宕机一小时,那么在这一小时内,谁都无奈提交更新,也就无奈协同工作。要是地方服务器的磁盘产生故障,碰巧没做备份,或者备份不够及时,就会有失落数据的危险。最坏的状况是彻底失落整个我的项目的所有历史更改记录。 分布式版本控制系统的客户端并不只提取最新版本的文件快照,而是把代码仓库残缺地镜像下来。这么一来,任何一处协同工作用的服务器产生故障,预先都能够用任何一个镜像进去的本地仓库复原。因为每一次的提取操作,实际上都是一次对代码仓库的残缺备份。 可参考:Git 从入门到精通 Git vs SVNGit 和 SVN 孰优孰好,每个人有不同的体验。 Git是分布式的,SVN是集中式的 这是 Git 和 SVN 最大的区别。若能把握这个概念,两者区别根本搞懂大半。因为 Git 是分布式的,所以 Git 反对离线工作,在本地能够进行很多操作,包含接下来将要重磅推出的分支性能。而 SVN 必须联网能力失常工作。 Git简单概念多,SVN简略易上手所有同时把握 Git 和 SVN 的开发者都必须抵赖,Git 的命令切实太多了,日常工作须要把握add,commit,status,fetch,push,rebase等,若要熟练掌握,还必须把握rebase和merge的区别,fetch和pull的区别等,除此之外,还有cherry-pick,submodule,stash等性能,仅是这些名词听着都很绕。 在易用性这方面,SVN对于老手来说会更有好一些。然而从另外一方面看,Git 命令多意味着性能多,若咱们能把握大部分 Git 的性能,领会到其中的奥秘,会发现再也回不去 SVN 的时代了。 Git分支便宜,SVN分支低廉在版本治理里,分支是很常应用的性能。在公布版本前,须要公布分支,进行大需要开发,须要 feature 分支,大团队还会有开发分支,稳固分支等。在大团队开发过程中,经常存在创立分支,切换分支的求。 Git 分支是指针指向某次提交,而 SVN 分支是拷贝的目录。这个个性使 Git 的分支切换十分迅速,并且创立老本非常低。 而且 Git 有本地分支,SVN 无本地分支。在理论开发过程中,常常会遇到有些代码没写完,然而需紧急解决其余问题,若咱们应用 Git,便能够创立本地分支存储没写完的代码,待问题解决完后,再回到本地分支持续实现代码。 更多关注Git与Svn的比拟请参阅:通俗易懂|用好Git 和 SVN ,轻松驾驭版本治理 Git 工作原理文字不好了解,请看 图文详解 Git 工作原理 Git 装置Debian/Ubuntu 环境装置如果你应用的零碎是 Debian/Ubuntu , 装置命令为: ...

April 28, 2021 · 4 min · jiezi

关于git:Git-Commit提交规范

成果预览:最终commit格局: feat(Controller): 批改xxxxx1. 概述每次提交,Commit message 都包含三个局部:Header,Body 和 Footer。 <type>(<scope>): <subject>// 空一行<body>// 空一行<footer> 其中,Header 是必须的,Body 和 Footer 能够省略。不论是哪一个局部,任何一行都不得超过72个字符(或100个字符)。这是为了防止主动换行影响好看。 2.1 HeaderHeader局部只有一行,包含三个字段:type(必须)、scope(可选)和subject(必须)。(1)typetype用于阐明 commit 的类别,只容许应用上面7个标识。 1. feat:新性能(feature)2. fix:修补bug3. docs:文档(documentation)4. style: 格局(不影响代码运行的变动)5. refactor:重构(即不是新增性能,也不是批改bug的代码变动)6. test:减少测试7. chore:构建过程或辅助工具的变动如果type为feat和fix,则该 commit 将必定呈现在 Change log 之中。其余状况(docs、chore、style、refactor、test)由你决定,要不要放入 Change log,倡议是不要。(2)scopescope用于阐明 commit 影响的范畴,比方数据层、管制层、视图层等等,视我的项目不同而不同。(3)subjectsubject是 commit 目标的简短形容,不超过50个字符。 以动词结尾,应用第一人称当初时,比方change,而不是changed或changes第一个字母小写结尾不加句号(.) 2.2 BodyBody 局部是对本次 commit 的详细描述,能够分成多行。上面是一个范例。 More detailed explanatory text, if necessary. Wrap it to about 72 characters or so. Further paragraphs come after blank lines.- Bullet points are okay, too- Use a hanging indent有两个留神点。(1)应用第一人称当初时,比方应用change而不是changed或changes。(2)应该阐明代码变动的动机,以及与以前行为的比照。2.3 FooterFooter 局部只用于两种状况。(1)不兼容变动如果以后代码与上一个版本不兼容,则 Footer 局部以BREAKING CHANGE结尾,前面是对变动的形容、以及变动理由和迁徙办法。 ...

April 28, 2021 · 1 min · jiezi

关于git:git-常用命令

git 常用命令基于下面的图片,咱们来理解一些概念 版本库 .git文件当咱们应用git管理文件时,比方git init时,这个时候,会多一个.git文件,咱们把这个文件称之为版本库。另外一个作用就是它在创立的时候,会主动创立master分支,并且将HEAD指针指向master分支。工作区本地我的项目寄存文件的地位能够了解成图上的workspace暂缓区(Index/Stage)顾名思义就是临时寄存文件的中央,通过是通过add命令将工作区的文件增加到缓冲区本地仓库(Repository)通常状况下,咱们应用commit命令能够将暂存区的文件增加到本地仓库通常而言,HEAD指针指向的就是master分支近程仓库(Remote)举个例子,当咱们应用GitHub托管咱们我的项目时,它就是一个近程仓库。通常咱们应用clone命令将近程仓库代码拷贝下来,本地代码更新后,通过push托送给近程仓库。git文件状态 - git statuschanges not staged for commit - 示意得大略就是工作区有该内容,然而缓存区没有,须要咱们git addchanges to be commit - 示意文件放在缓存区了,咱们须要git commitnothing to commit,working tree clean - 这个时候,咱们将本地的代码推送到远端即可常见命令分支治理查看本地分支 - git branch查看近程分支 - git branch -r查看本地和近程分支 -git branch -a从以后分支,切换到其余分支 - git checkout <branch-name>创立并切换到新建分支 - git checkout -b <branch-name>删除本地分支 - git branch -d/-D <branch-name>以后分支与指定分支合并 - git merge <branch-name>查看各个分支最初一个提交对象的信息 - git branch -v删除近程分支 - git push origin -d <branch-name>或git push origin :<brnach-name>重命名分支 -git brnach -m <oldbranch-name> <newbranch-name>拉取近程分支并创立本地分支 - git checkout -b 本地分支名 origin/近程分支名x或git fetch origin <branch-name>:<local-branch-name>近程仓库内容更新到本地 - git fetch命令用于从近程获取代码并合并本地的版本 - git pull花式撤销撤销「工作区」批改 - git checkout -- <file>暂存区文件撤销 (不笼罩工作区) - git reset HEAD <file>版本回退 - git reset --(soft | mixed | hard ) < HEAD ~(num) >应用场景:场景1:当你改乱了工作区某个文件的内容,想间接抛弃工作区的批改时,用命令git checkout -- file。 ...

April 27, 2021 · 1 min · jiezi

关于git:Git常用操作

仓库 在当前目录新建一个Git代码库git init新建一个目录,将其初始化为Git代码库git init [project]下载一个我的项目git clone [url] 配置显示以后的Git配置git config --list设置提交代码时的用户信息git config [--global] user.name "[name]"git config [--global] user.email "[email address]"

April 27, 2021 · 1 min · jiezi

关于git:git-代理

执行git config -l查看代理 勾销http代理, 勾销https代理#勾销http代理git config --global --unset http.proxy#勾销https代理git config --global --unset https.proxyHTTP 代理git config --global http.proxy http://127.0.0.1:1080git config --global https.proxy http://127.0.0.1:1080Socks5 代理git config --global http.proxy socks5://127.0.0.1:1080git config --global https.proxy socks5://127.0.0.1:1080留神这里的 socks5 仅仅是代理应用的协定,它仍然是针对 http 设置的,所以仅对 http 协定的仓库无效。应用 git@xxx 这种 ssh 连贯的不会应用代理。 也能够分域名设置代理: git config --global http.https://github.com.proxy http://127.0.0.1:1080git config --global https.https://github.com.proxy https://127.0.0.1:1080SSH 代理SSH 代理须要在密钥目录 (~/.ssh) (Windows 下是 C:\Users{UserName}.ssh) 新建一个 config 文件,没有后缀名。 Linux 零碎写入以下配置(未验证): 须要 netcatProxyCommand nc -v -x 127.0.0.1:1080 %h %pWindows: ...

April 24, 2021 · 1 min · jiezi

关于git:Git231164下载和安装Windows10

Git2.31.1-64下载和装置【Windows10】Git下载下载地址:http://git-scm.com/download 点击后会主动下载 Git装置在下载的文件夹中找到安装包,双击运行装置 前面一路默认选项…… 测验是否装置胜利抉择电脑里的任意目录,右击查看是否有对于Git的选项

April 24, 2021 · 1 min · jiezi

关于git:如何规范你的Git-commit

导读:commit message应该如何写才更清晰明了?团队开发中有没有遇到过让人头疼的git commit?本文分享在git commit标准建设上的实际,规定了commit message的格局,并通过webhook在提交时进行监控,防止不标准的代码提交。背景Git每次提交代码都须要写commit message,否则就不容许提交。一般来说,commit message应该清晰明了,阐明本次提交的目标,具体做了什么操作……然而在日常开发中,大家的commit message千奇百怪,中英文混合应用、fix bug等各种抽象的message司空怪罪,这就导致后续代码保护老本特地大,有时本人都不晓得本人的fix bug批改的是什么问题。基于以上这些问题,咱们心愿通过某种形式来监控用户的git commit message,让标准更好的服务于品质,进步大家的研发效率。 标准介绍首先咱们能够看下AngularJS 的标准,它是由 Google 推出的一套提交音讯标准规范,也是目前应用范畴最广的标准。有一套正当的手册也较为系统化;并且还有配套的工具能够供咱们应用。 说白了,标准就是用工具进行强束缚。标准执行计划如下:既然有了计划,就会依照某些规定执行,以下是 Google AnguarJS 标准的要求: 标准指标 容许通过脚本生成 CHANGELOG.md能够通过范畴的关键词,疾速的搜寻到指定版本git log HEAD --grep feat(package.json) # 在package.json文件里新增的个性。格局要求 <type>(<scope>): <subject> <BLANK LINE> <body> <BLANK LINE><footer>音讯只占用一行,任何行都不能超过 100 个字符容许应用 GitHub 以及各种 Git 工具浏览音讯提交音讯由页眉、注释和页脚组成,由空行分隔<type> 代表某次提交的类型,比方是修复一个 bug 或是减少一个 feature,类型如下:<scope> 范畴能够是指定提交更改地位的任何内容,如: 对 package.json 文件新增依赖库,chore(package.json): 新增依赖库或对代码进行重构,refacto(weChat.vue): 重构微信进件<subject> 如果没有更适合的范畴,能够间接写提交内容 标准建设初期咱们在互联网上搜寻了大量无关git commit标准的材料,但只有Angular标准是目前应用最广的写法,比拟正当和系统化,并且有配套的工具(IDEA就有插件反对这种写法)。最初综合阿里巴巴高德地图相干部门已有的标准总结出了一套git commit标准。 commit message格局 <type>(<scope>): <subject> 总结编码标准、流程标准在软件开发过程中是至关重要的,它能够使咱们在开发过程中少走很多弯路。Git commit标准也是如此,的确也是很有必要的,简直不破费额定精力和工夫,但在之后查找问题的效率却很高。作为一名程序员,咱们更应重视代码和流程的规范性,永远不要在品质上将就。

April 23, 2021 · 1 min · jiezi

关于git:git学习笔记

本地 git 的应用ubuntu 装置 gitsudo apt install git设置上传代码用户的标识(全程应用git_demo为例)全局设置 $ git config --global user.name "name"$ git config --global user.email "email@example.com"独自为我的项目设置 git_demo设置用户名和邮箱 $ cd git_demo$ git init //将git_demo文件夹设为git我的项目,文件夹下呈现.git文件夹用于管制我的项目$ git config user.name "name"$ git config user.email "email@example.com"操作文件当初我新建两个文件 demo01 demo02 ,并应用 git status 查看目前的状态。 ascrew@A11200421050195:~/workspace/personal/git_demo$ git status位于分支 master尚无提交未跟踪的文件: (应用 "git add <文件>..." 以蕴含要提交的内容) demo01.txt demo02.txt提交为空,然而存在尚未跟踪的文件(应用 "git add" 建设跟踪)能够看到两个文件曾经被git发现,然而目前还没有跟踪这两个文件,他们还不受版本控制,作任何批改也不会有记录。这是须要两个命令对它们进行操作。add 、commit git add --alladd会把文件放到暂存区期待后续commit,能够了解add为把想要提交的文件和不打算提交又不打算还原的文件进行拆散开来。 gascrew@A11200421050195:~/workspace/personal/git_demo$ git status位于分支 master尚无提交未跟踪的文件: (应用 "git add <文件>..." 以蕴含要提交的内容) demo01.txt demo02.txt提交为空,然而存在尚未跟踪的文件(应用 "git add" 建设跟踪)git commit -m "your commit notes"commit 后文件就被保留到git环境里了,能够应用 git log 查看提交记录,其总commit 前面一长串代码是本次提交的id,用于辨认和还原代码等操作。 ...

April 22, 2021 · 3 min · jiezi

关于macos:Mac-升级git

背景之前始终应用mac自带的git,最近发现IDEA里始终提醒git版本低 零碎版本:10.13.4 (17E199) macOS High Sierragit版本:2.8.1git目录降级过程装置 新的git (ctl+c可跳过hombrew的降级)brew install git装置过程会提醒以后有git,无奈link,先不必管等装置完装置实现依据提醒,笼罩现有git:brew link --overwrite git实现,查看git版本后记我发现,新版本的git, 能够间接通过git version来查看git版本,而我之前的git只能通过git --version来查看不要置信其那个装置git,而后设置path来让应用新的git的教程,会有两个git存在..

April 20, 2021 · 1 min · jiezi

关于git:Git基本使用

1,Git的四大工作区域Workspace:你电脑本地看到的文件和目录,在Git的版本控制下,形成了工作区。Index/Stage:暂存区,个别寄存在 .git目录下,即.git/index,它又叫待提交更新区,用于长期寄存你未提交的改变。比方,你执行git add,这些改变就增加到这个区域啦。Repository:本地仓库,你执行git clone 地址,就是把近程仓库克隆到本地仓库。它是一个寄存在本地的版本库,其中HEAD指向最新放入仓库的版本。当你执行git commit,文件改变就到本地仓库来了~Remote:近程仓库,就是相似github,码云等网站所提供的仓库,能够了解为近程数据交换的仓库~2,Git文件的四种状态依据一个文件是否已退出版本控制,能够把文件状态分为:Tracked(已跟踪)和Untracked(未跟踪),而tracked(已跟踪)又包含三种工作状态:Unmodified,Modified,Staged Untracked: 文件还没有退出到git库,还没参加版本控制,即未跟踪状态。这时候的文件,通过git add 状态,能够变为Staged状态Unmodified:文件曾经退出git库, 然而呢,还没批改, 就是说版本库中的文件快照内容与文件夹中还完全一致。Unmodified的文件如果被批改, 就会变为Modified. 如果应用git remove移出版本库, 则成为Untracked文件。Modified:文件被批改了,就进入modified状态啦,文件这个状态通过stage命令能够进入staged状态staged:暂存状态. 执行git commit则将批改同步到库中, 这时库中的文件和本地文件又变为统一, 文件为Unmodified状态3,Git的根本常用命令git initgit clonegit pull/git fetch: git remote -v :查看近程仓库git fetch/pull origin master:temp :从近程的origin仓库的master分支下载到本地master并新建一个temp分支(pull为间接与本地仓库合并,而fetch不会主动合并,应用fetch是更为平安的一种抉择)git add :将内容存进Index/Stage(暂存区)中。 git restore <file>:撤销add的内容。git commit -m '提交形容':将文件提交到Repository(本地仓库)。git push<h2>分支操作</h2> git checkout 分支名:切换到该分支。git checkout -b dev:创立分支并间接切换到该分支。git branch:查看以后分支(-v查看分支的更具体的信息:hash)。git merge xxx:合并分支。git branch -d 分支名:删除分支。<h2>版本控制</h2> git log:查看各个版本的详细信息。 --pretty==oneline(以更简洁的形式显示,每个版本只显示一行,只显示版本的hash和提交的形容信息: -m的内容)。git oneline:比 --pretty==oneline的hash值更短。git reflog:比 --pretty==oneline多了一个可查看须要回退版本的次数。git reset --hard [文件hash]:后退或者后退到该历史版本。git reset --hard HEAD^:后退一个版本(有几个^符号就退几个版本)。git reset --hard HEAD~n:后退n个版本。git diff:比拟多个文件。 ...

April 20, 2021 · 1 min · jiezi

关于IDEA:IDEA配置Git中maven项目的运行环境

在Git上导入我的项目之后,敞开我的项目。点击Open,从pom.xml文件关上我的项目。配置Git开发角色和rad.properties(development文件夹下)。在右侧的Maven窗口中,点击Reimport All Maven Projects。配置Tomcat:在Deployment中删掉原来的Deployment,增加新的exploded。在Server中配置Name,Open browser,On ‘Update’ action:Update classes and resources,On frame deactivation: Update classes and resources,JRE。而后点击Apply,OK实现配置。至此,IDEA中maven我的项目的运行环境配置实现。

April 20, 2021 · 1 min · jiezi

关于git:Git-HTTPSSH-代理配置

http://www.chenhe.cc/p/406

April 20, 2021 · 1 min · jiezi

关于IDEA:IDEA使用日志记录一下配置运行项目引发的服务器问题以及解决办法

在应用Git组织代码的时候,commit时只勾选本人改变过的文件。不要勾选rad.properties文件和.xml文件。留神:此时代码只是提交到了本地库中,要想上传到Git库中,还须要点击Push能力上传到Git中。在运行我的项目时,运行的我的项目总是无奈加载CSS款式。呈现这种问题的起因是Tomcat的配置谬误。解决办法:进入Tomcat目录中的conf-server.xml中,将Connector标签中的compression批改为“off”。

April 19, 2021 · 1 min · jiezi

关于git:git基本知识

1.版本控制版本控制是一种记录若干文件内容变动,以便未来查阅特定版本订正状况的零碎。简略来讲就是备份和记录,上面理解下三种不同版本控制的倒退历程 1.1 本地版本控制系统人们把我的项目拷贝到本地磁盘进行备份,而后以命名形式来辨别。这种做法长处是简略,但毛病更多,比方备份更多,很有可能会混同不同版本之间的区别。为了解决这个问题,具备了第一种本地版本的管理系统。 本地版本治理就是把版本号存入数据库来记录文件的历次更新差别 1.2 集中化版本控制系统本地版本控制系统可能将不同版本的文档保留下来并且借助版本记录能够很不便定位相干文件但又引入了新的问题,如何让在不同零碎上开发者协同工作?于是,集中化版本控制系用(Centralized Version Control Systems,简称CVCS)应运而生。这类零碎,例如svn,都有一个繁多的集中管理的服务器,保留所有文件的订正版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新,多年以来,这一成为版本控制系统的规范做法。 这样做的长处是解决了人们开发协同的问题,然而把所有的代码提交到同一台服务器上有一个显著的毛病就是单点故障,如果这台服务器宕机了,那所有人都不能提交代码,还有如果这台服务器磁盘产生故障,碰巧没做备份或者备份不够及时,就还是会有失落数据的危险,最坏的状况是彻底失落整个我的项目的所有历史更改记录,而被客户端提取进去的某些快照数据除外,但这样的话仍然是个问题,你不能保障所有的数据都曾经有人当时实现提取进去过。本地版本控制系统也存在相似问题,只有整个我的项目的历史记录被保留在繁多地位,就有失落所有历史更新的危险。 1.3 分布式版本控制系统为了解决集中化版本管理所带来的问题,分布式版本治理控制系统(Distributed Version Control Systems,简称为DVCS)就应运而生了。在这类零碎中,例如git,客户端不只是提取出最新版的文件快照,而是把最原始的代码仓库镜像到本地,这样一来,任何一处协同工作用的服务器产生故障,任何时候都能够用任何一个镜像进去的本地仓库复原。因为每一次的提取操作,实际上都是一次对代码仓库的实现备份 所以综上来看的集中化版本控制系统是对本地版本控制系统的一次降级,因为它退出了协同操作,分布式版本控制系统是对集中化版本控制系统的一次补充,使之更加欠缺 2.装置git装置git依据git官网提供的下载方式就能够了,在这里就不赘述了 3.git的三种状态和工作模式应用git操作文件时,文件的状态分为以下三种: 状态形容已批改(modified)已批改示意批改了文件,但还没保留到数据库中已暂存(staged)已暂存示意对一个已批改文件的以后版本做了标记,使之蕴含在下次提交的快照中已提交(commited)已提交示意数据曾经平安的保留在本地数据库中针对git文件的是三种状态,这里须要理解git我的项目的三哥工作区域:工作区、暂存区、git仓库 分类形容工作区简略的了解为在电脑里能看到的目录,比方本人创立的本地我的项目目录暂存区git的版本库里存了很多货色,其中最重要的称为stage或者叫index的暂存区,还有git主动创立的第一个分支master,以及指向master的一个指针叫做HEADgit仓库工作区又一个暗藏目录.git,这个不是工作区,而是git的版本库根本的git工作流程形容如下: 在工作区中批改某些文件对批改后的文件进行快照,而后增加到暂存区提交更新,将保留在暂存区域的文件快找永恒转储到git仓库中流程图如下: 4.创立版本库版本库又名仓库,能够简略了解成一个目录,这个目录下所有文件都能够被git治理起来,每个文件的批改、删除,git都能追踪,以便任何时刻都能够追踪历史,或者在未来某个时刻能够还原。初始化git仓库执行git init在本地初始化一个本地仓库 5.git 命令5.1 提交相干命令git config 配置本机或者本git仓库的用户信息命令形容git config --global user.name查看或者设置全局也就是本机的用户name,该命令后不加想要设置的用户名,加上就是设置,例如git config --global user.name "John Doe",将用户名设置为John Doegit config user.name查看或者设置本仓库的用户name,git config --global user.name "tom",将本仓库的用户名设置为tomgit config --global user.email跟下面全局user.name统一git config user.email跟下面本仓库user.name统一git add 将文件增加到暂存区命令形容git add filename将单个文件增加到暂存区,例如git add a.txt 就是将已批改的a.txt增加到暂存区git add .将该仓库内所有批改、增加、删除等已批改的文件增加到暂存区git add -u将仓库内所有批改和删除的文件到暂存区git add -i通过交互式的形式将文件增加到暂存区git commit 将暂存区文件提交到本地仓库中命令形容git commit调用vim编辑器进行提交信息的编写git commit -m msg间接进行提交信息的编写,例如git commit -m 'first commit'git commit -a -m msg将所有批改和删除的文件都提交到本地仓库,留神不蕴含新建的文件git commit --amend能将本次批改的内容合并到上一次的commit,尽量不要批改曾经提交到近程仓库的代码git status查看文件状态 ...

April 18, 2021 · 1 min · jiezi

关于git:常用git命令要常用

请放弃IDE中git的傻瓜式操作,上面通过移步换景的形式相熟罕用git命令,而后爱不释手。 场景1 上传代码到近程仓库# 初始化git仓库git init# 全副写入暂存区git add .# 将暂存区内容增加到本地仓库git commit -m "first commit"# 关联近程仓库git remote add origin https://github.com/username/*.git# 提交到近程仓库git push -u origin master以上操作实现后,代码就顺利上传到近程仓库了。 场景2 查看操作记录# 查看工作区和和暂存区的文件状态git status# 查看全副的提交记录git log# 查看某人的提交记录git log --author='username'# 查看文件提交记录和commit idgit log --pretty=oneline 目录/文件名# 查看某次提交的操作记录git show <commit id># 查看文件操作记录和文件变动git log -p 目录/文件名# 查看简写的提交记录git log --oneline# 查看版本路线git log --oneline --graphgit log命令的更多参数,请查阅官网文档。 场景3 配置用户名和邮箱# 配置用户名git config --global user.name '<username>'# 为以后仓库配置用户名git config --add --local user.name '<username>'# 配置邮箱git config --global user.email '<email>'# 为以后仓库配置邮箱git config --add --local user.email '<email>'# 查看配置,重点关注user.name和user.email变量的值git config --global --listgit config命令的更多配置,请查阅官网文档。 ...

April 18, 2021 · 2 min · jiezi

关于git:Git-添加公钥

ssh-keygen -t rsa -C "email@email.com"

April 15, 2021 · 1 min · jiezi

关于reset:git-reset三种不同模式的区别

三棵树了解 reset 和 checkout 的最简办法,就是以 Git 的思维框架(将其作为内容管理器)来治理三棵不同的树。 “树” 在咱们这里的理论意思是 “文件的汇合”,而不是指特定的数据结构。 (在某些状况下索引看起来并不像一棵树,不过咱们当初的目标是用简略的形式思考它。) Git 作为一个零碎,是以它的个别操作来治理并操纵这三棵树的: 树用处HEAD上一次提交的快照,下一次提交的父结点Index预期的下一次提交的快照Working Directory沙盒HEADHEAD 是以后分支援用的指针,它总是指向该分支上的最初一次提交。 这示意 HEAD 将是下一次提交的父结点。 通常,了解 HEAD 的最简形式,就是将它看做 该分支上的最初一次提交 的快照。 其实,查看快照的样子很容易。 下例就显示了 HEAD 快照理论的目录列表,以及其中每个文件的 SHA-1 校验和: $ git cat-file -p HEADtree cfda3bf379e4f8dba8717dee55aab78aef7f4dafauthor Scott Chacon 1301511835 -0700committer Scott Chacon 1301511835 -0700initial commit$ git ls-tree -r HEAD100644 blob a906cb2a4a904a152... README100644 blob 8f94139338f9404f2... Rakefile040000 tree 99f1a6d12cb4b6f19... libGit 的 cat-file 和 ls-tree 是底层命令,它们个别用于底层工作,在日常工作中并不应用。 不过它们能帮忙咱们理解到底产生了什么。 索引索引是你的 预期的下一次提交。 咱们也会将这个概念援用为 Git 的“暂存区”,这就是当你运行 git commit 时 Git 看起来的样子。 ...

April 15, 2021 · 3 min · jiezi

关于git:Git-工作流程

团队多人合作,必须要有一个适宜团队的,标准的工作流程 合作必须有一个标准的工作流程,让大家无效地单干,使得我的项目东倒西歪地倒退上来。"工作流程"在英语里,叫做"workflow"或者"flow",原意是水流,比喻我的项目像水流那样,顺畅、天然地向前流动,不会产生冲击、对撞、甚至漩涡。市面上次要有3中工作流Git flow,Github flow,Gitlab flow。这里咱们采纳Git flow工作流。 上面具体介绍该工作流 次要特点首先,我的项目存在两个长期分支。 主分支master开发分支develop前者用于寄存对外公布的版本,任何时候在这个分支拿到的,都是稳固的散布版;后者用于日常开发,寄存最新的开发版。(两个长期分支)其次,我的项目存在三种短期分支。 性能分支(feature branch)补丁分支(hotfix branch)预发分支(release branch)(可用集体开发分支代替)日常开发创立集体开发分支,基于近程 dev 创立 git checkout -b feature-a origin/dev同步 dev 分支 git rebase origin/dev实现开发,commit,push 近程。发动合入 dev 分支申请(应用 gitlab 新建合并申请)管理者承受合并申请,代码合并进入 dev 分支。预公布版本测试、正式发版创立预公布分支(如:release-1.0.0),基于 dev 分支创立预公布分支测试预公布分支代码测试通过后,合入 master 分支正式公布版本,打版本 tagbug 修复预公布版本 bug 修复创立bug分支,基于预公布版本分支创立。(假如预公布版本分支为:release-1.0.0) git checkout -b 15-release-1.0.0-bug-a origin/release-1.0.0倡议 bug 分支命名标准:与 issue 的名字保持一致,并且以issue的编号起首。如"15-release-1.0.0-bug-a "。开发实现后,在提交阐明外面,能够写上"fixes #14"或者"closes #67"。Gitlab 规定,只有commit message外面有上面这些动词 + 编号,就会敞开对应的issue。如未创立 issue,去掉头部的编号。实现修复 bug ,本地提交(commit),push 近程。发动合入预公布版本分支(应用 gitlab 新建合并申请)。发动合入 dev 分支(应用 gitlab 新建合并申请)。 留神:bug 修复实现后,同时须要合入 dev 分支管理者承受合并申请,代码合入指标分支。master(线上) bug 修复流程同 "预公布版本 bug 修复" 流程 ...

April 13, 2021 · 1 min · jiezi

关于git:Git-工作流程及分支策略

本文首发于 刘星的集体网站 Git 是目前世界上最先进的分布式版本控制系统。它使咱们更不便的跟踪,治理和组织代码。也帮忙了咱们更好的与其余开发者进行合作开发。然而没有规矩不成方圆。合作开发必须有一个标准来束缚各个贡献者的行为。这个标准就是 Git 工作流程(Git Workflow),也为咱们标准各个分支管理策略等行为。Git 工作流程是无关如何应用 Git 以高效合作开发的规定或策略倡议,下文这些常见工作流程只是作为领导参考,这些工作流不是变化无穷的,咱们应该依据本人的项目选择或制订适合本人的工作流。 集中式工作流首先咱们来介绍最简略粗犷的集中式工作流,如果你用过SVN,那么你能够无痛切换到 Git 集中式工作流。该工作流只用到 master 这一个主分支来保护咱们的代码,这也是该工作流的次要工作形式。 工作流程示例1、首先 clone 近程仓库到本地 git clone ssh://user@host/path/to/repo.git2、而后在本地的 master 分支做出批改实现开发后,创立一个提交 git status # 查看本地仓库的批改状态git add # 暂存文件git commit # 提交文件3、而后推送到近程仓库 git push origin master4、 如果此时本地仓库与近程仓库有了一致,Git 将回绝操作并报错。这时咱们就应该先 pull 近程仓库的批改到本地仓库后再解决从新推送 git pull --rebase origin master5、如果有抵触,Git 会在合并有抵触的提交处暂停 rebase 过程,并报出错误信息,咱们在解决掉抵触后能够应用一下命令将更改退出暂存区后持续只能执行 rebase: git add <some-file>git rebase --continue如果遇到一个搞不定的抵触,这能够应用一下命令来终止 rebase git rebase --abort次要遵循原则只用到 master 这一个分支,所有的批改都推送到 master 分支master 分支代表了我的项目的正式公布版本,所以提交历史应该被尊重且是稳固不变的pull 代码时, 最好应用 rebase 而不是生成一个 merge commit长处集中式工作流次要长处是简略,非常适合小型团队对于要从 SVN 迁徙过去的团队来说很敌对毛病当您的团队规模扩充时,下面详述的抵触解决过程可能会成为瓶颈齐全没有施展 Git 的劣势,在理论应用 Git 合作的我的项目开发中很少应用集中式工作流如果在稍大的团队中应用后面的集中式工作流,那么可能会在解决抵触中节约很多工夫。在理论开发中咱们基本上都是都 性能驱动式开发,基于性能需要,创立相应的分支进行开发,实现开发合并到主分支后再被删除掉。接下来咱们介绍的三个工作流:GitHub Flow,Git Flow 及 Gitlab Flow 都是基于不同的分支管理策略运作的。 ...

April 12, 2021 · 3 min · jiezi

关于git:搭建Git服务器设置免密登陆

有些代码不想传到开原仓库github或者码云,那么本人搭建git服务器将会是一个不错的抉择。 筹备工作首先须要有一台Linux云服务器,举荐Ubuntu,装置git非常简略。并且须要有一个具备sudo权限的账号,个别是root 装置Gitsudo apt-get install git创立Git用户用来运行git服务 sudo adduser git创立证书免密登陆创立本机的公钥 ssh-keygen -t rsa而后一路回车到底,就会在~/.ssh/目录下看到两个新创建的文件,id_rsa.pub和id_rsa,一个是公钥一个是私钥,这里关上公钥id_rsa_pub,复制外面的内容前面会用到。用新创建的用户登录SSH服务器,并关上服务器上的目录/home/git,这里是新创建的用户根目录,个别状况下还没有创立.ssh目录的,须要运行ssh-keygen -t rsa命令来创立,最好不要手动创立,不然还要更改目录权限。创立好.ssh目录之后,cd进去,而后touch authorized_keys来创立authorized_keys文件,这个文件是用来记录客户端的公钥,以实现免密登陆。将之前在客户端创立的公钥内容复制到authorized_keys中,而后保留退出。 初始化Git仓库以做测试假如在/home/git目录下 git init --bare demo.git会呈现一个demo.git目录,而后更改目录权限和所有者 sudo chown -R git:git demo.git克隆Git仓库到本地git clone git@xx.xx.xx:/home/git/demo.git这时候按理说是不应该输出明码,间接克隆胜利的,如果没有胜利,阐明服务器上的/home/git/.ssh和/home/git/.ssh/authorized_keys权限不对。 .ssh目录的权限必须是700 .ssh/authorized_keys文件权限必须是600更改权限 sudo chmod -R 700 /home/git/.ssh,sudo chmod 600 /home/git/.ssh/authorized_keys而后能够提交一下代码,测试一下是否胜利。

April 11, 2021 · 1 min · jiezi

关于前端:Git常用命令和多账号配置

团队合作开发中少不了版本控制管理工具,因为近期公司我的项目从 SVN 更换成 Git ,这里次要做一个温习总结。 SVN 和 Git 最次要要的区别: SVN 是集中式的, Git 是分布式的。 Git 的劣势在于易于本地减少分支和分布式的个性,可离线提交,解决了异地团队协同开发等 SVN 不能解决的问题。 Git 最外围的一个概念就是工作流。 工作区(Workspace) 是电脑中理论的目录。暂存区(Index) 相似于缓存区域,长期保留你的改变。仓库区(Repository) ,分为本地仓库和近程仓库。 常用命令速查先来偷个图(图片来源于网络): 初始化# 在当前目录新建一个Git代码库$ git init# 新建一个目录,将其初始化为Git代码库$ git init [project-name]# 下载一个我的项目和它的整个代码历史 [Git only]$ git clone [url]配置# 列举所有配置$ git config -l# 为命令配置别名$ git config --global alias.co checkout$ git config --global alias.ci commit$ git config --global alias.st status$ git config --global alias.br branch# 设置提交代码时的用户信息$ git config [--global | --local] user.name "[name]"$ git config [--global | --local] user.email "[email address]"减少/删除/批改文件# 增加指定文件到暂存区$ git add [file1] [file2] ...# 增加指定目录到暂存区,包含子目录$ git add [dir]# 增加当前目录所有文件到暂存区$ git add .# 删除工作区文件,并将这次删除放入暂存区$ git rm [file1] [file2] ...# 进行追踪指导文件,但不删除$ git rm --cached [file]# 文件改名,并放入暂存区$ git mv [old] [new]提交# 提交暂存区到仓库区$ git commit -m [message]# 提交暂存区的指定文件到仓库区$ git commit [file1] [file2] ... -m [message]# 提交工作区自上次commit之后变动,间接到仓库区$ git commit -a# 提交时显示所有diff信息$ git commit -v# 应用一次新的commit,代替上一次提交;若代码无变动,则改写上次commit的提交信息$ git commit --amend -m [message]# 重做上一次commit,并包含指定文件的新变动$ git commit --amend [file1] [file2]分支# 显示所有本地分支$ git branch# 列出所有近程分支$ git branch -r# 列出所有本地分支和近程分支$ git branch -a# 新建分支,但停留在以后分支$ git branch [branch-name]# 新建分支,与指定近程分支建设追踪关系$ git branch --track [branch] [remote-branch]# 删除分支$ git branch -d [branch-name]# 删除近程分支$ git push origin --delete [branch-name]$ git branch -dr [remote/branch]# 新建分支,并切换到该分支$ git checkout -b [branch-name]# 切换到指定分支,并更新工作区$ git checkout [branch-name]# 切换到上一个分支$ git checkout -# 建设追踪关系,在现有分支与指定的近程分支之间$ git branch --set-upstream [branch] [remote-branch]# 合并指定分支到以后分支$ git merge [branch]# 衍合指定分支到以后分支$ git rebase [branch]# 合并一个commit到以后分支$ git cherry-pick [commit]标签# 列出所有本地标签$ git tag# 基于最新提交创立标签$ git tag [tag]# 删除标签$ git tag -d [tag]# 删除近程标签$ git push origin :refs/tags/[tag]# 查看标签信息$ git show [tag]# 提交指定标签$ git push [remote] [tag]# 提交所有标签$ git push [remote] --tags# 新建一个分支,指向某个标签$ git checkout -b [branch] [tag]查看信息# 显示状态$ git status# 显示以后分支的版本历史$ git log# 显示commit历史,以及每次commit产生变更的文件$ git log --stat# 搜寻提交历史,依据关键词$ git log -S [keyword]# 显示某个文件的版本历史,包裹文件改名$ git log --follow [file]$ git whatchanged [file]# 显示指定文件相干的每一次diff$ git log -p [file]# 显示过来5次提交$ git log -5 --pretty --oneline# 显示所有提交过的用户,按提交次数排序$ git shortlog -sn# 显示指定文件是什么人在什么工夫批改过$ git blame [file]# 查看某人提交记录$ git log --author=[username] # 显示暂存区和工作区差别$ git diff# 显示暂存区和上一个commit差别$ git diff --cached [file] # 显示工作区和以后分支最新commit之间的差别$ git diff HEAD# 查看某次提交具体批改内容$ git show [commit]# 显示某次提交发生变化的文件$ git show --name-only [commit]# 显示某次提交,某个文件的内容$ git show [commit]:[file]# 显示以后分支最近几次提交$ git reflog近程操作# 下载近程仓库的所有变动$ git fetch [remote]# 取回近程仓库变动,并与本地分支合并$ git pull [remote] [branch]# 取回近程仓库的变动,并与本地分支变基合并$ git pull --rebase [remote] [branch]# 显示所有近程仓库$ git remote -v# 显示某个近程仓库的信息$ git remote show [remote]# 减少一个新的近程仓库,并命名$ git remote add [remote-name] [url]# 上传本地指定分支到近程仓库$ git push [remote] [branch]# 强行推送以后分支到近程仓库,即便有抵触$ git push [remote] --force# 推送所有分支到近程仓库$ git push [remote] -all撤销# 复原暂存区的指定文件到工作区$ git checkout [file]# 复原暂存区当前目录的所有文件到工作区$ git checkout .# 复原工作区到指定 commit$ git checkout [commit]# 重置暂存区的指定文件,与上一次 commit 保持一致,但工作区不变$ git reset [file]# 重置暂存区与工作区,与上一次 commit 保持一致$ git reset --hard# 重置以后分支的指针为指定 commit,同时重置暂存区,但工作区不变$ git reset [commit]# 重置以后分支的HEAD为指定 commit,同时重置暂存区和工作区,与指定 commit 统一$ git reset --hard [commit]# 撤销工作目录中所有未提交文件的批改内容$ git reset --hard HEAD# 新建一个 commit,用于撤销指定 commit,后者所有变动将被前者对消,并利用到以后分支$ git revert [commit]# 将未提交的变动放在储备区$ git stash# 将储备区的内容复原到当前工作区$ git stash pop多账号配置有时候咱们本人有 github 的账号作为集体应用,公司团队应用 gitlab 另一账号,这时咱们就须要对同一设施配置多账号。 ...

April 10, 2021 · 3 min · jiezi

关于git:git-patch常用方法

简略记录下日常用到的git patch相干用法。 1. git format-patch/am生成patch生成patch,指定commit id,针对它前面每一个commit别离独自生成patch文件。patch文件依照commit的先后顺序从1开始编号。patch文件会生成到当前目录下。 git format-patch ec06d35b生成的patch例子 apply patchapply patch胜利后会主动commit,并且保留原来commit的comments,submittor等信息。 git am 0001-some-patch2. git diff/git apply生成patchA..B,生成A到B之间的patch(不蕴含A),A是较早的submit id git diff ec06d35b..3280c7bb > 3280c7bb_somepatch.patchapply patchcheck patch,不理论apply: git apply --check 3280c7bb_somepatch.patchapply patch:不会主动像git am一样主动commit,须要手动commit,原来的committor和comment也不能保留。 git apply 3280c7bb_somepatch.patch3. git diff/patchgit apply 对patch上下文查看比拟严格,如果apply 失败,能够尝试用patch命令 apply patch查看patch,不理论apply: patch -p1 --dry-run < 3280c7bb_somepatch.patchapply patch: patch -p1 --dry-run < 3280c7bb_somepatch.patch4. 手动批改patch有时候patch apply遇到问题,能够依据以后上下文,手动批改patch再进行apply。也能够删除有问题的hunk,patch胜利后再手动批改(如联合git commit --amend...) 上面是一个批改patch的例子:批改前的patch: 批改后的patch:这里加了一行comments,此时须要同步update patch的行数批改信息。其格局为 @@ -[起始行号],[批改前的行数] +[起始行号],[批改后的行数] 批改前的行数为上下文和'-'局部的总行数,批改后的行数为上下文和'+'局部的总行数。其中上下文都须要空格结尾,包含空白行。

April 9, 2021 · 1 min · jiezi

关于运维:阿里云云效技术专家一文详解kubernetes下5种常见发布模式如何选择

简介:Kubernetes下5场场景利用公布形式的抉择,每种公布模式适宜什么样的场景,以及如何在阿里云云效上高效落地。作者:郑云龙,阿里云云效技术专家 Kubernetes面向通用场景提供了非常灵活的利用治理和运维形式,而作为云效CI/CD平台的开发同学,在日常和用户交换过程中,咱们常常会被用户问到对于公布的问题,比方不同职能团队之间应该如何配合、公布的最佳实际应该是什么样子的等等。 明天咱们就来聊聊Kubernetes下利用公布形式的抉择,每种公布模式适宜什么样的场景,以及如何在云效上高效落地。 Kubernetes利用首先咱们来看看个别状况下Kubernetes是如何治理利用的。 Kubernetes通过申明式的API,并提供了一系列的资源来满足各种各样的利用运维场景: • 从利用的角度咱们会关注利用容器(Pod),利用配置(ConfigMap/Secret),利用须要长久化的信息(Volume),利用与利用之间的服务发现(Service),以及如何将应用服务裸露给集群外的用户(Ingress)等。 • 从集群运维的角度看,因为利用运行在集群中咱们须要管制利用在集群中的权限(ServiceAccount/ClusterRole/Role)使得利用可能以最小所需权限准则在集群中运行,同时运维要治理和配置集群的存储资源(PV/PVC),同时对于资源无限的状况咱们还须要治理和管制利用自身的资源暂用以及配额(quata)等等等。 而在理论场景中因为利用应用的框架(Doubbo/Spring Cloud)的不同,利用对外提供的服务场景不同(后端或者前端),不同的利用可能只须要关注其中的一小部分资源 比方当你采纳了像Spring Cloud或者Doubbo这类自带了服务发现的利用开发框架,你可能并不关怀Kubernetes所提供的服务发现能力(Service),只须要通过Deployment来部署和治理这些利用实例。 又比如说如果你采纳了独自的配置管理核心,那ConfigMap/Secret这些可能也不会呈现在你的Kubernetes资源清单中。 又比如说,如果是一个面向用户前端利用,在利用部署是除了Deployment实例以外,你还要关系如何将这个服务裸露给内部用户,这是就须要相应的Ingress以及Service的资源来形容。 同时在单个利用在整个零碎中所处的地位不同又会导致咱们对于公布的验证形式也会产生差别,比方一个后端微服务的公布,咱们可能只须要确保公布过程零碎不中断即可,而对于前端利用咱们可能心愿公布可能当初一小部分用户上进行验证,在线上流量充沛测试后,再实现整个版本升级。 如上所示,对于利用而言采纳的技术架构不同,提供的服务的形式不同,对公布验证形式要求的不同都会导致Kubernetes的应用上产生各种各样的差别,而云效为了可能反对这些不同的差别提供了多种多样的公布模式,接下来咱们就来看看云效下罕用的这些公布模式,以及他们所实用的场景。 Kubernetes公布模式最原生:YAML公布 顾名思义,这是咱们在应用Kubernetes时最间接的利用部署形式,而在继续交付流水线中咱们个别将这些用于形容Kubernetes资源的YAML文件通过Git进行对立版本治理,通过云效CI/CD平台监听代码库的变更事件,并通过流水线将这些YAML变更同步到集群当中。这种形式也被称为GitOps模式。 在云效当中,咱们除了反对间接同步YAML到Kubernetes集群以外,还扩大了根本的模板能力,你能够通过在YAML文件中定义变量占位符如${IMAGE},通过流水线运行是通过Docker镜像构建或者阿里云镜像仓库触发器(帮忙文档:阿里云镜像仓库触发器触发流水线),动静产生要公布的镜像版本 如下所示: YAML公布反对任意资源类型,因而实用于如下场景: 1、开发自运维,团队并充沛了解和把握Kubernetes原生的公布策略,心愿通过YAML实现利用的降级与公布以及回滚,一般来说利用Git库会蕴含利用源码,Dockerfile以及部署利用所需的所有YAML文件(在某些状况下,YAML可能是由独自的Git仓库进行治理,以进行细粒度的权限管制)。 2、基础设施运维:运维团队通过Git治理集群的所有基础设施配置,并通过流水线实现集群的对立治理以及配置的同步 更多具体应用介绍请参考:云效Kubernetes YAML公布 **最简略:镜像降级 ** 在和一些云效用户的交换场景中,在也会有用户心愿开发团队可能尽可能少的了解Kubernetes相干概念,在这种状况下由专职的运维团队负责实现应用环境的部署和初始化。而开发团队只负责实现代码开发,并通过流水线自动化实现利用镜像构建,并应用该镜像对集群中已有的利用进行降级。开发团队只关怀利用的工作负载实例资源。 如下图所示,在云效流水线中咱们监听利用代码库的变动,并构建出相应的Docker镜像,而公布阶段只须要指定对集群中实例并关联前序工作产生的镜像即可实现利用的降级公布: 如上所述,该场景实用于: • 开发和运维拆散:运维团队充沛了解Kubernetes的原生公布策略,开发团队只负责产出代码以及利用镜像,由运维团队负责集群中利用的理论运维治理。 对于如何在云效中应用镜像降级能力,请参考:云效Kubernetes镜像降级 过程可控:分批公布 在后面两个小结中,咱们都强调用户须要充沛了解Kubernetes的原生公布策略,Kubernetes原生的公布策略次要是指RollingUpdate模式,用户通过申明降级策略,如maxSurge和maxUnavailable管制Pod的启动策略以及最大不可用Pod数,来确保即便利用公布出现异常的状况,也能保障服务的根本可用。 除此,因为利用启动往往有肯定的耗时,如果应用了Kubernetes的服务发现机制,咱们还须要配置如liveness以及readiness探针,来防止利用还在启动过程中就有不在打算内的流量进入到正在启动的实例当中。同时整个公布过程是不可逆的,如果认定以后公布呈现了异样咱们只能通过从新公布的形式来使利用回到可用状态。 而在云效的分批公布中,咱们以Service为最小公布单元,在公布开始阶段咱们将基于新版镜像创立出利用的版本V2,并依据以后利用的正本总数以及分批数量,对新旧两个版本的利用实例别离进行缩容和扩容,来管制理论进入到新版利用的流量比例,从而能够实现小规模的公布验证,在对公布进行充沛验证后再逐渐齐全下线老版利用。 同时批次之间反对暂停和手动复原让用户能够充沛对针对公布过程进行管制。 该模式实用于:采纳Kubernetes原生的服务发现机制,并心愿取得相比于原生Kubernetes公布更好过程控制性以及安全性的用户。 更多具体应用介绍,请参考帮忙文档:云效Kubernetes分批公布 内部流量可控:Ingress灰度公布 相比于分批公布灰度公布更强调更加可控和平安的线上验证。而灰度公布在Kubernetes中因为利用的部署模式的不同大抵分为两种,咱们首先来说第一种,基于Ingress的灰度公布,如下所示,咱们通过Ingress将集群内的服务裸露给内部用户: 在公布过程中咱们心愿可能通过cookie或者header的形式使得特定的用户或者开发人员,可能在线上对新版本援用进行验证,通过小局部可控的线上流量验证后,咱们的公布可靠性更好,如果呈现预期外的问题,也能够疾速回滚,并且整个灰度验证过程对非灰度用户齐全不可感知。 在云效流水线的Ingress灰度公布中,咱们以Ingress作为公布单元,当触发部署后,将会依据以后Ingress以及其关联的Service/Deployment资源,基于新版镜像创立出V2版本的Service/Deployment。 并通过Nginx Ingress的Annoation实现对流量规定申明,从而确保只有满足特定特色的流量能力进入到V2版本中,当处于灰度状态时,流水线将会期待人工验证,以触发公布或者或者回滚操作。 对于如何在云效流水线中应用灰度公布请参考帮忙文档:云效Nginx Ingress灰度公布 该模式实用于:采纳Ingress对外裸露应用服务,并且心愿可能通过灰度的形式对公布进行验证 外部流量可控:Istio/ASM灰度公布 而在微服务的场景中,并不是所有的服务都须要间接裸露给内部用户,如下所示: 当采纳微服务架构,咱们大部分的后端服务是只裸露与集群内,微服务之间通过Kubernetes Service进行互相拜访,在这种状况下,当采纳灰度公布模式时,咱们须要在Service级别进行流量管制,已确保指定的流量才进入到灰度的链路而不对失常用户产生影响。 不过因为Kubernetes原生在Service级别并不反对任何的流量管制规定,因而咱们须要在集群中部署Istio或者采纳阿里云ServiceMesh来对服务之间的流量进行细粒度的管制。 如下图所示,当应用Kubernetes蓝绿公布模式时,能够设置灰度流量规定,从而只有当申请中蕴含指定的Cookie配置的申请转发到灰度版本当中: ...

April 9, 2021 · 1 min · jiezi

关于vue.js:Vuecli30项目蜘蛛电影步骤解析

我的项目简介 蜘蛛电影次要是仿猫眼电影的一个vue我的项目次要性能:1. 城市定位2. 展现正在热映的电影3. 展现行将上映的电影4. 搜寻5. 展现影院6. 我的页面7. 电影详情我的项目开发环境 编译工具:vscode操作系统:win10node环境:node 12.18.3 npm6.14.6Vue脚手架:vue-cli 4.5.4版本管理工具:git bash 2.28.0服务器软件:Tomcat9.0(我设置Tomcat服务器对应的地址为:localhost:8082)我的项目开发流程 1. 我的项目需要剖析2. 我的项目工期评估3. 我的项目责任划分 前端: 动态页面制作 前端框架选型 前端页面架构 后端: 数据库开发 API接口文档 API接口实现 创立我的项目 在对应的我的项目目录下关上cmd利用Vue-cli创立我的项目:(我抉择的是Vue3.x版本)vue create 我的项目名创立完后会生成一堆文件夹和文件: 在gitee创立我的项目对应的近程仓库 将本地库与近程库进行关联 把master分支中初始的我的项目文件/目录都推送到近程仓库中 创立并切换到dev分支,把dev分支的初始我的项目文件/目录也推送到近程仓库 创立并切换到一个新的分支(createComponents)用来专门创立组件 以下局部在createComponents分支上开发↓↓↓↓↓↓ 初始化路由的配置---电影页面,影院页面,我的页面 总共有三个页面:电影页面,影院页面,我的页面电影页面的路由配置: 影院页面的路由配置: 我的页面的路由配置: 在路由主配置页面(index.js)中引入各路由: 路由重定向的配置 当跳转的路由不存在,利用重定向默认跳转到电影页面(门路:/movie)重定向:redirect:'跳转的路由'在router文件夹下的index.js进行配置: 对我的项目中初始的index.html文件进行一些批改 //减少了user-scalable=no,不容许用户放大放大页面<meta name="viewport" content="width=device-width,initial-scale=1.0,user-scalable=no"> //引入公共的css款式<link rel="stylesheet" href="<%= BASE_URL %>css/common.css"> //引入图标<link rel="stylesheet" href="https://at.alicdn.com/t/font_2446917_rga2fsr9ns.css"> App.vue文件的批改 留出一个路由进口:<router-view />加上keep-alive标签:实现页面缓存作用,因为切换组件被从新渲染时会影响性能,会显著进步用户体验(会缓存不流动的组件) 创立头部组件 在components文件夹下创立一个header文件夹,并在此文件夹下创立index.vue文件1. 编写相干的HTML,CSS代码2. 为实现动静值(对应页面对应题目)的切换(实现父子组件的数据传递),可利用在Vue中的props(数据单向传递。父组件值的会扭转子组件的值,子组件的值扭转不会影响父组件) 定义一个名称title,类型为String,默认值为'蜘蛛电影' 而后在对应标签(<h1></h1>)中的内容处写上{{title}},接管传递过去的数据 创立尾部组件 在components文件夹下创立一个footer文件夹,并在此文件夹下创立index.vue文件编写相应的HTML,CSS代码 创立页面组件---电影页面 在views文件夹下创立一个movie文件夹,并在此文件夹下创立index.vue文件1. 初始化页面代码2. 在script标签中引入头部组件和尾部组件 import Header from "@/components/header"; import Footer from "@/components/footer";3. 为切换头部组件中的题目,在Header标签中增加属性title,值为'蜘蛛电影',传递给header组件4. 编写相应的HTML,CSS代码 HTML中分为两局部: 1) 电影菜单栏(城市定位,正在热映,行将上映,搜寻) 2) 正在上映和行将上映的电影页面展现(通过router-view标签进行相应的渲染) 5. 对电影菜单栏的每一个性能都应用router-link标签,使其跳转到对应的子路由 ...

April 9, 2021 · 6 min · jiezi

关于git:自动产出changelog第一节规范提交代码

背景把项目管理流程与代码治理流程买通后运作的这一年,发现产出Changelog这步就是占据咱们团队公布环节中较多工夫的一环,将这步交由CI/CD工具进行主动生成,从效率的角度来说把人手解放素来投入其余工作会更迷信和正当。 问题主动产出Changelog内容有哪些工具能够用?具体怎么用?反对自定义吗?自定义水平如何?都是本文探讨的内容。探讨自定义性能的前提是在CI/CD工具中只能解决已知问题,生成Changelog的工具须要在这种环境下稳固地工作。人机交互式的应用形式是比拟浪漫,然而并不是本文探讨的重点。 调研过程一开始是在调研drone这个CI/CD工具如何在同一个分支下提交更新的changlog和版本号后不反复触发构建脚本的问题。在翻查其官网文档找到答案后,便开始解决下一个环节的问题:如何更新版本号和changelog?更新版本号的问题,在翻查npm官网文档后找到答案,具体内容曾经总结在这篇文章之中《应用npm命令行更新版本号》。因为changelog的产出根本是围绕着git log自身的数据来进行细化和解决的,所以产出changelog的问题讲分为两个方向:一个是如何记录,另一个是如何产出。 标准提交代码全网搜寻相干内容时,大多围绕着commitizen这个工具来说,而大多数文章都是基于angular.js提供的提交格局进行介绍,当然还有其余标准在这里就不一一探讨了。所以记录的格局暂应用angular.js的提交格局,这里先简略介绍一下。 代码提交的格局angular的git提交内容格局标准如下: <type>(<scope>): <subject><BLANK LINE><body><BLANK LINE><footer>大抵分为三个块: header:<type>(<scope>): <subject>,理论是提交信息的概括(summary)body: <body>,理论是提交信息的形容中的内容(description)footer: <footer>,理论是提交信息的形容中最末端的内容(description)个别记录时长这个样子: feat: 减少素材库抉择性能敞开 #323, #233更具体的内容能够移步至阮一峰的这篇《Commit message 和 Change log 编写指南》具体理解。 标准代码提交格局的工具代码提交个别应用的是git commit命令,输出的内容并没有格式化解决。为了更好地记录log,就呈现了commitizen工具帮忙咱们标准录入。 装置 npm install -g commitizen首次化 commitizen init cz-conventional-changelog --save-dev --save-exact配置 echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc应用 # 上面三种形式都可行git cznpx czcz# 就会显示上面的选项? Select the type of change that you're committing: (Use arrow keys)> feat: A new feature fix: A bug fix docs: Documentation only changes style: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc) refactor: A code change that neither fixes a bug nor adds a feature perf: A code change that improves performance test: Adding missing tests or correcting existing tests(Move up and down to reveal more choices)选项和解析是英文的,想要自定义内容能够在配置的文档中写入规定,比方批改type抉择: ...

April 8, 2021 · 3 min · jiezi

关于前端:设置本地ssh公钥

设置本地的公钥首先须要在用户文件夹创立.ssh文件,不晓得的在这个地位 在这个文件夹内关上命令行工具 输出 ssh-keygen -t rsa -C "你的邮箱@xxx.com" 命令之后就可生成公钥,为了不便全程回车即可(不必输出ras文件名及明码)通过编辑器或者记事本什么的关上.ssh 目录下的 id_rsa.pub 这个文件。这一大坨就是你生成的公钥把它全副复制下来,我这里是在码云增加的公钥,其余的大差不差进入到码云的设置页进入平安设置下的ssh公钥,关上就是这个吊样子这样就配置好了

April 7, 2021 · 1 min · jiezi

关于hexo:使用-Hexo-在-GithubGitee-搭建博客

Hexo 是一个疾速、简洁且高效的博客框架,利用 Node.js 所带来的超快生成速度,让上百个页面在几秒内霎时实现渲染。反对 GitHub Flavored Markdown 的所有性能,甚至能够整合 Octopress 的大多数插件。只需一条指令即可部署到 GitHub Pages, Heroku 或其余平台。弱小的 API 能与数种模板引擎(EJS,Pug,Nunjucks)和工具(Babel,PostCSS,Less/Sass)轻易集成。 装置装置 Hexo 相当简略,只须要先装置 Node.js 和 Git,而后运行如下命令: $ npm install hexo-cli -g建站装置 Hexo 实现后,请执行下列命令,Hexo 将会在指定文件夹中新建所须要的文件。 $ hexo init <folder>$ cd <folder>$ npm install配置文件 _config.yml 里是网站的 配置 信息,您能够在此配置大部分的参数。 命令new$ hexo new <title>以上命令会创立一个 source/about/\<title\>.md 文件,如果题目蕴含空格的话,请应用引号括起来。 server$ hexo server启动服务器。默认状况下,拜访网址为: http://localhost:4000/。 deploy$ hexo deploy部署网站。该命令能够简写为: $ hexo d部署Hexo 提供了疾速不便的一键部署性能,只需一条命令就能将网站部署到服务器上。 hexo deploy在开始之前,您必须先装置 hexo-deployer-git $ npm install hexo-deployer-git --save而后批改 _config.yml 配置 ...

April 4, 2021 · 1 min · jiezi

关于git:解决git-clone速度太慢的问题

最近发现应用git clone的速度比较慢,于是找到了方法分享给大家: 思路:git clone特地慢是因为github.global.ssl.fastly.net域名被限度了。只有找到这个域名对应的ip地址,而后在hosts文件中加上ip–>域名的映射,刷新DNS缓存便可。 施行:在网站 https://www.ipaddress.com/ 别离搜寻:github.global.ssl.fastly.netgithub.com 失去ip: github.global.ssl.fastly.net的ip github.com的ip 关上hosts文件Windows上的hosts文件门路在C:WindowsSystem32driversetchostsLinux的hosts文件门路在:sudo vim /etc/hosts在hosts文件开端增加两行(对应下面查到的ip)199.232.69.194 github.global-ssl.fastly.net140.82.112.3 github.com 保留更新DNSWinodws零碎的做法:关上CMD,输出ipconfig /flushdnsCentOS的做法:在终端输出nscd -i hosts实现,试试git clone这条命令速度如何?

April 3, 2021 · 1 min · jiezi

关于版本控制:Git学习笔记

Git装置linux $ sudo yum install gitmac: http://git-scm.com/download/mac windows: http://git-scm.com/download/win git官网文档: https://git-scm.com/book/zh/v2 Git装置完之后,须要做最初一步配置,如果你没有做这项配置,是没有git公钥和私钥的,而上传代码到近程仓库的时候须要秘钥进行验证是否自己上传的,想要创立能够应用上面的办法: 关上git bash,别离执行以下两句命令git config --global user.name “用户名”git config --global user.email “邮箱”config 的三个作用域 --local 只对某个仓库无效--global 对以后用户所有仓库无效--system 对系统所有登录的用户无效--listSSH配置关上git bash。应用cd ~/.ssh能够查看是否已配置SSH。执行生成公钥和私钥的命令ssh-keygen -t rsa 并按回车3下(为什么按三下,是因为有提醒你是否须要设置明码,如果设置了每次应用Git都会用到明码,个别都是间接不写为空,间接回车就好了)。会在一个文件夹外面生成一个私钥 id_rsa和一个公钥id_rsa.pub。(可执行start ~命令,生成的公私钥在 .ssh的文件夹外面)。.ssh如果不做非凡解决的话,个别是在C:\Users\Administrator目录下。如果看不到.ssh文件,能够应用ls -ah指令查看暗藏文件夹即可,这是寄存秘钥的文件,关上这个文件会看到id_rsa和id_rsa.pub。id_rsa是私钥文件,id_rsa.pub是公钥文件。执行查看公钥的命令cat ~/.ssh/id_rsa.pub 。建Git仓库两种场景: 1.把已有的我的项目代码纳入Git治理 cd 我的项目代码所在的文件夹git init2.建设新的我的项目间接用Git治理 cd 某个文件夹git init your_project #会在以后门路下创立和我的项目名雷同的文件夹cd your_projectmkdir 创立目录echo "" > 文件名 创立文件clear 清屏在仓库中增加文件 1.将文件拷贝到工作目录 cp ... .2.测试文件符合要求后增加到暂存目录 git add filesgit add -u 所有文件3.查看文件是否被git治理 git status4.提交暂存区的文件 git commit -m'更改理由' -am'..'从工作区间接提交 ...

April 2, 2021 · 4 min · jiezi

关于git:git-command

初始 git init创立一个本地仓库的克隆版本 git clone /path/to/repository远端服务器上的仓库 git clone username@host:/path/to/repository增加暂存区 git add <filename>提交理论更动 git commit -m "代码提交信息"增加近程服务器 git remote add origin <server>提交远端 git push origin master //-f 强行提交拉取远端 git pull origin mastercommit查看提交 git log回滚提交 git reset --hard id

April 1, 2021 · 1 min · jiezi

关于git:git-配置及常用命令

$ git config --global --list # 查看全局配置$ git config --local --list # 查看本我的项目配置$ git config --global user.name hoby # 批改提交名$ git config --global alias.br branch # 批改简写$ git config --global core.ignorecase false # 敞开疏忽大小写$ git config --unset alias.name # 默认删除以后我的项目配置,--global删除全局1、$ git config --global --list #查看以后配置 未配置,则执行以下命令进行配置: git config --global user.name "这里换上你的用户名"git config --global user.email "这里换上你的邮箱"切换分支 git checkout xxx "你的分支名称"合并分支代码 git merge xxx "你的分支名称"

April 1, 2021 · 1 min · jiezi

关于git:谈谈-Git-存储原理及相关实现

原文作者为Gitee负责人周凯,原创于微信公众号「Zoker 随笔」摘要:Git 是目前最风行的版本控制系统,从本地开发到生产部署,咱们每天都在应用 Git 进行咱们的版本控制,除了日常应用的命令之外,如果想要对 Git 有更深一步的理解,那么钻研下 Git 的底层存储原理将会对了解 Git 及其应用十分有帮忙,就算你不是一个 Git 开发者,也举荐你理解下 Git 的底层原理,你会对 Git 的弱小有一个全新的意识,并且将会在日常的 Git 应用过程中更加得心应手。 这篇文章面向的读者次要是对 Git 有肯定的理解的群体,并不会介绍具体 Git 的作用及其应用,也不会介绍与其它版本控制系统如 Subversion 之间的差别,次要是介绍下 Git 的实质以及他的存储实现的相干原理,旨在帮忙 Git 使用者更加清晰的理解在应用 Git 进行版本控制的时候其外部实现。 Git 实质是什么Git 实质上是一个内容寻址的 Key-Value 数据库,咱们能够向 Git 仓库内插入任意类型的内容,Git 会返回给咱们一个惟一的键值,能够通过这个键取出过后咱们插入的值,咱们能够通过底层命令git hash-object命令来尝试: ➜ Zoker git:(master) ✗ cat testfileHello Git➜ Zoker git:(master) ✗ git hash-object testfile -w9f4d96d5b00d98959ea9960f069585ce42b1349a能够看到咱们目录下有一个名为testfile的文件,内容是Hello Git! 咱们应用git hash-object命令将这个文件的内容写入到 Git 仓库,-w 选项通知 Git 把这个内容写到 Git 的.git/objects对象数据库目录,并且 Git 返回了一个 SHA 值,这个 SHA 值就是后续咱们要取出这个文件的键值: ...

March 31, 2021 · 5 min · jiezi

关于前端:Git基础指令和进阶

工作区(working directory),简言之就是你工作的区域。对于git而言,就是的本地工作目录。工作区的内容会蕴含提交到暂存区和版本库(以后提交点)的内容,同时也蕴含本人的批改内容。暂存区(stage area, 又称为索引区index),是git中一个十分重要的概念。是咱们把批改提交版本库前的一个过渡阶段。查看GIT自带帮忙手册的时候,通常以index来示意暂存区。在工作目录下有一个.git的目录,外面有个index文件,存储着对于暂存区的内容。git add命令将工作区内容增加到暂存区。本地仓库(local repository),版本控制系统的仓库,存在于本地。当执行git commit命令后,会将暂存区内容提交到仓库之中。在工作区上面有.git的目录,这个目录下的内容不属于工作区,外面便是仓库的数据信息,暂存区相干内容也在其中。这里也能够应用merge或rebase将近程仓库正本合并到本地仓库。图中的只有merge,留神这里也能够应用rebase。近程版本库(remote repository),与本地仓库概念基本一致,不同之处在于一个存在近程,可用于近程合作,一个却是存在于本地。通过push/pull可实现本地与近程的交互;近程仓库正本,能够了解为存在于本地的近程仓库缓存。如需更新,可通过git fetch/pull命令获取近程仓库内容。应用fech获取时,并未合并到本地仓库,此时可应用git merge实现近程仓库正本与本地仓库的合并。git pull 依据配置的不同,可为git fetch + git merge 或 git fetch + git rebase。rebase和merge的区别能够本人去网上找些材料理解下。一、解决抵触 场景如下:人生不如意之事十之八九,合并分支往往也不是一帆风顺的` git switch -c feature1//创立新的feature1分支,并切换到feature1分支` git add readme.txt ` git commit -m "AND simple"//分支中实现代码批改并提交 ` git switch master git add readme.txt ` git commit -m "& simple" //切回到master分支,但在master分支上对readme.txt文件也做了同行地位的代码提交`当初master分支和feature1分支各自都别离有新的提交,变成了这样: 这种状况下,Git无奈执行疾速合并,只能试图把各自的批改合并起来,但这种合并就可能会有抵触,咱们试试看: $ git merge feature1Auto-merging readme.txtCONFLICT (content): Merge conflict in readme.txtAutomatic merge failed; fix conflicts and then commit the result.果然抵触了!Git通知咱们,readme.txt文件存在抵触,必须手动解决抵触后再提交。git status也能够通知咱们抵触的文件: ...

March 31, 2021 · 7 min · jiezi

关于git:Git基础知识之内部状态管理系统

本文次要来介绍一下 Git 的外部状态管理系统。它利用基于节点和指针的数据结构来跟踪及治理编辑操作的工夫线。 对本地我的项目而言,任一时刻,Git 处于三种状态中的一种:工作区状态、暂存区状态和提交区状态。上面利用新建我的项目来演示一下不同状态及其转换。 1. Initialize the project$ mkdir git_tree_test && cd git_tree_test$ git init提醒:应用 'master' 作为初始分支的名称。这个默认分支名称可能会更改。要在新仓库中提醒:配置应用初始分支名,并打消这条正告,请执行:提醒:提醒: git config --global init.defaultBranch <名称>提醒:提醒:除了 'master' 之外,通常选定的名字有 'main'、'trunk' 和 'development'。提醒:能够通过以下命令重命名刚创立的分支:提醒:提醒: git branch -m <name>已初始化空的 Git 仓库于 /Users/phillee/git_tree_test/.git/$ git status位于分支 master尚无提交无文件要提交(创立/拷贝文件并应用 "git add" 建设跟踪) 这时咱们初始化了一个本地我的项目,默认创立 master 分支,尚无文件跟踪及提交。 2. The Working Directory$ touch reset_lifecycle_file$ git status位于分支 master尚无提交未跟踪的文件: (应用 "git add <文件>..." 以蕴含要提交的内容) reset_lifecycle_file提交为空,然而存在尚未跟踪的文件(应用 "git add" 建设跟踪) 当初咱们为我的项目新增了文件 reset_lifecycle_file ,尚未提交,以后位于工作区(Working directory)。博客园代码显示零碎太垃圾了,这时的 reset_lifecycle_file 应该是红色的,示意还没有被跟踪。 3. Staging Index$ git add reset_lifecycle_file $ git status位于分支 master尚无提交要提交的变更: (应用 "git rm --cached <文件>..." 以勾销暂存) 新文件: reset_lifecycle_file 所有变动的文件,Git 都记录在一个区域,叫做"暂存区"(Staging index)。咱们通过 git add 指令将工作区中的内容保留到暂存区,这时曾经实现了对文件的跟踪,但还没有申请提交。这时候的文件曾经被跟踪了,reset_lifecycle_file 应该是绿色的。 ...

March 30, 2021 · 2 min · jiezi

关于golang:Golang语言-Gin框架环境配置报错处理接口调用配置和日志管理|Go主题月

装置:下载并装置 go get -u github.com/gin-gonic/gin装置失败的话,间接关上 github.com/gin-gonic/gin,下载压缩包,并在GOPATH门路的src目录上面建设github.com,解压到这个目录上面; 遇到的报错信息:Go 我的项目编译:cannot find package "." in:* 将短少依赖的包重新安装一次即可解决问题。 go: inconsistent vendoring in xxx报错批改GOPAHT,改到非GOROOT门路。GOROOT是GO语言装置门路,GOPATH是GO语言编译环境所需门路,因而二者不能为同一门路 新建我的项目在GOPATH目录上面的src上面新建一个文件夹app,应用命令 go mod init新建 main.go,写出咱们的第一个程序 package mainimport "github.com/gin-gonic/gin"func main() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "name": "叫我詹躲躲", "gend": "男", }) }) r.Run(":8080")}运行程序 go run main.go浏览器运行: 生成JSONfunc AsciiJSON() { r := gin.Default() r.GET("/", func(c *gin.Context) { c.JSON(200, gin.H{ "name": "叫我詹躲躲", "gend": "男", }) }) r.Run(":8080")}调用package mainimport ( "app/function" "github.com/gin-gonic/gin")func main() { //应用AsciiJSON生成带有本义的非ASCII字符的纯ASCII JSON。 function.AsciiJSON()} ...

March 30, 2021 · 2 min · jiezi

关于git:源码安装git

git 源码装置重要:yum install libcurl-devel装置之前先装置这个,否则https 不能用 1. 下载源码wget https://github.com/git/git/archive/refs/tags/v2.31.0.tar.gz2. 解压tar -zxvf v2.31.0.tar.gz3.编译装置cd v2.31.0.configure -prefix=/usr/lcoal/报错: 提醒没有 .configure 解决: 装置 autoconf 生成 yum install autoconfautoconf.configure -prefix=/usr/local/报错: no acceptable C compiler found in $PATH 没有 C 编译器 解决: 装置 C 编译器 yum install gcc.configure -prefix=/usr/local/make && make install报错: fatal error: zlib.h: No such file or directory 没有 zlib.h 解决: 装置zlib-devel yum install zlib-develmake && make install呈现 rm -f "$execdir/$p" && if test -z ""; then test -n "" && ln -s "$destdir_from_execdir_SQ/bin/git" "$execdir/$p" || { test -z "" && ln "$execdir/git" "$execdir/$p" 2>/dev/null || ln -s "git" "$execdir/$p" 2>/dev/null || cp "$execdir/git" "$execdir/$p" || exit; }; fi done && remote_curl_aliases="" && for p in $remote_curl_aliases; do rm -f "$execdir/$p" && test -n "" && ln -s "git-remote-http" "$execdir/$p" || { test -z "" && ln "$execdir/git-remote-http" "$execdir/$p" 2>/dev/null || ln -s "git-remote-http" "$execdir/$p" 2>/dev/null || cp "$execdir/git-remote-http" "$execdir/$p" || exit; } done && ./check_bindir "z$bindir" "z$execdir" "$bindir/git-add"大略这么一串,阐明胜利,cd 到装置门路 ...

March 28, 2021 · 1 min · jiezi

关于git:Git-for-Webstorm-基本常用操作

附录: Git 命令我的项目 Clone业务 & 开发分支的创立Stash & 分支 Checkout代码 Commit & Push代码 Merge代码抵触解决Git diff & Log撤销本地 CommitPatch 的创立与利用Changelist 利用附录: Git 命令增加到近程仓库 1. **VCS** → **Enable Version Control Integration** → **Git**2. 复制近程仓库 URL3. **VCS** → **Git** → **Remotes** → **填入近程仓库 URL**4. 提交文件(**Ctrl + K**), 填入提交信息, 推送到近程仓库(**Ctrl + Shift + K**)我的项目 Clone 1. File -> New -> Project from Version Control2. 抉择 `Git`, 填入 URL, Clone 实现后会提醒是否关上我的项目业务 & 开发分支的创立业务分支创立: 1. 在 Jira Story 中找到 **开发** → **创立分支** (先复制 Jira Story 工作名字)2. **分支来自** 抉择 **master**3. **分支命名标准**: **NEW_FEATURE_{Jira Story 工作名字}**, eg: **NEW_FEATURE_周年庆流动**4. 点击 **创立分支**开发分支创立: ...

March 27, 2021 · 2 min · jiezi

关于编辑器:日常工具篇

办公软件通信PC和Mobile 即时通讯软件邮箱会议全时云会议腾讯会议zoom近程办公vpn迷信上网研发工具编辑器VS CodeSublime TextMarkdownTyporaNode.jsnrm版本治理git浏览器ChromeFirefoxEdge看图/压缩2345在线压缩图片 TinyPNGPS原型工具思维导图xMind其余

March 26, 2021 · 1 min · jiezi

关于git:工程化之Git代码提交规范

为什么须要制订提交标准为什么须要制订提交标准,简略总结如下: 让之后的我的项目维护者理解代码呈现特定变动和增加feature的起因不便code review清晰的历史记录,不便疾速浏览查找,回溯之前的工作内容标准的提交记录可用于主动生成版本公布日志(CHANGELOG.MD)基于提交类型,触发构建和部署流程怎么制订提交标准Conventional Commits是目前应用最宽泛的提交信息标准,其次要受 AngularJS标准 的启发 commit 格局如下: <type>[scope]: <subject>//空一行[optional body]//空一行[optional footer(s)]标准阐明# 次要typefeat: 减少新性能fix: 修复bug# 非凡typedocs: 只改变了文档相干的内容style: 代码格式化相干的改变,例如去掉空格、扭转缩进、增删分号,不扭转代码逻辑refactor: 代码重构时应用,没有增加新性能或者修复bugperf: 进步性能的改变chore: 结构工具的改变,扭转构建流程、减少依赖库、工具等,例如webpack,npm# 暂不应用typetest: 增加测试用例或者批改现有测试用例revert: 回退,撤销上一次的 commitci: 与CI(继续集成服务)无关的改变如何束缚标准怎么确保每个提交都能符合规范呢,最好的形式就是通过工具来生成和校验; commitizen是一个nodejs命令行工具,通过交互的形式,生成符合规范的git commit;conventional-changelog是一款能够依据我的项目的commit 和 metadata信息主动生成 changelogs 和 release notes的系列工具;standard-version能够主动帮你实现生成version、打tag, 生成CHANGELOG等系列过程;commitizen是一个撰写合格 Commit message 的工具。 格局校验commitlint应用commitlint和husky来进行提交查看,当执行git commit时会在对应的git钩子上做校验,只有合乎格局的Commit message能力提交胜利。 生成Change log 的工具conventional-changelog 主动版本治理和生成CHANGELOGstandard-version一个用于生成CHANGELOG.md和进行SemVer(语义化版本号)发版的命令行工具,次要性能: 主动批改最新版本号,能够是package.json或者自定义一个文件读取最新版本号,创立一个最新的git tag依据提交信息,生成CHANGELOG.md创立一个新提交包含 CHANGELOG.md和package.json参考标准GIT代码提交信息&自动化版本治理Commit message 和 Change log 编写指南

March 25, 2021 · 1 min · jiezi

关于centos7:centos-源码安装gitcentos环境变量的配置方法

git 源码装置 1. 下载源码wget https://github.com/git/git/archive/refs/tags/v2.31.0.tar.gz2. 解压tar -zxvf v2.31.0.tar.gz3.编译装置cd vv2.31.0.configure -prefix=/usr/lcoal/报错: 提醒没有 .configure 解决: 装置 autoconf 生成 yum install autoconfautoconf.configure -prefix=/usr/local/报错: no acceptable C compiler found in $PATH 没有 C 编译器 解决: 装置 C 编译器 yum install gcc.configure -prefix=/usr/local/make && make install报错: fatal error: zlib.h: No such file or directory 没有 zlib.h 解决: 装置zlib-devel yum install zlib-develmake && make install呈现 rm -f "$execdir/$p" && if test -z ""; then test -n "" && ln -s "$destdir_from_execdir_SQ/bin/git" "$execdir/$p" || { test -z "" && ln "$execdir/git" "$execdir/$p" 2>/dev/null || ln -s "git" "$execdir/$p" 2>/dev/null || cp "$execdir/git" "$execdir/$p" || exit; }; fi done && remote_curl_aliases="" && for p in $remote_curl_aliases; do rm -f "$execdir/$p" && test -n "" && ln -s "git-remote-http" "$execdir/$p" || { test -z "" && ln "$execdir/git-remote-http" "$execdir/$p" 2>/dev/null || ln -s "git-remote-http" "$execdir/$p" 2>/dev/null || cp "$execdir/git-remote-http" "$execdir/$p" || exit; } done && ./check_bindir "z$bindir" "z$execdir" "$bindir/git-add"大略这么一串,阐明胜利,cd 到装置门路 ...

March 25, 2021 · 1 min · jiezi