///
Ver. 2.43 -- Shell Extensions · Issue #1397 · gitextensions
I installed 2.43 and picked the option to use Windows shell (not the BASH only ... Can you click to "Linux tools (sh) found on your computer"
Was empty. Filling C:\Program Files\Git\bin\ solved my issue! Thanks! Now it opens the bash in the current folder
/
git 拉取子模块 submodule
//第一步,初始化
git init
//第二步,拉取,后面推荐使用ssh地址
git submodule add (+地址)
------
git submodule updata --init --recursive 下拉子模块
--------------------
报错:
fatal: not a git repository (or any of the parent directories): .git
原因:没有初始化
解决:
git init
//
根据supper的父项目配置获取对应子项目。父模块仅进行拉取操作,
拉取完毕后,进入子模块进行构建操作
使用命令:
#父级+子集一起clone
git clone --recursive git地址
#协助父模块更新
git submodule update
#各模块拉取代码
示例
cd home
#使用npm+grunt 进行 build
mv${WORKSPACE}/../../Temp/home/node_modules ${WORKSPACE}/front-super/home
npm i--registry= https://blog.csdn.net/game_jqd/category_2275405.html
grunt build --force
mv${WORKSPACE}/front-super/home/node_modules${WORKSPACE}/../../Temp/home/node_modules
cd ..
#其他部署方式,单独部署,单独进行判断。
if $IS_Other; then
…
Fi
其他注意事项
由于supper控制粒度为迭代的版本,可能不足以满足测试定制化的要求
所以需要考虑supper拉取稳定版本,子版本checkout所需版本,来满足定制。
如果存在发布系统,那么也需要对此进行相应考虑和改动
///
1. 先从服务器端下手,下载Bonobo Git Server的源代码看一下服务器端是如何验证的。
web.config中就有答案,原来用的是http basic authentication。
< system.web >
< authorization >
< allow users ="?" />
authorization >
system.web >
location >
有了这个答案就可以和服务器端说88,并投入客户端的怀抱...
2. 客户端用的是msysgit+TortoiseGit,TortoiseGit只是壳,msysgit才是真相。
pull与push操作实际上都是调用msysgit中的git pull与git push命令,但git命令并没有传递用户名与密码的参数。
怎么办?... 问Google呗,对Google说话要精炼,不能哆嗦,我是这样说的:“git username password”;还是Google给力,第1页最后1条就给出了线索 —— Setup a remote git repository using http with push support and digest auth,见下图:
虽然Google出来的文章是针对Linux的,但不要轻易认为问题是Windows下的,对Linux下的解决方法看都不看一眼。直接找到答案很难,更多的时候我们是在找线索,并在发现的蛛丝马迹中不断地思考可能的解决方法。
这里的“.netrc”就是线索,利用这个线索继续对Google说:“git netrc windows”...
第1页第5个,"Stack Overflow"的大名映入眼帘:
Git - How to use netrc file on windows - Stack Overflow
Google再怎么+1也比不上品牌的力量,看到Stack Overflow,就看到了希望,就有点击的冲动。
点开一看,立即有“百度”(这里是“众里寻她千百度”的缩写)的感觉:
这就是正确答案,我们已经验证过了,下面详细描述一下解决方法:
1. 在Windows中添加一个HOME环境变量,值为%USERPROFILE%,如下图:
2. 在“开始》运行”中打开%Home%,新建一个名为“_netrc”的文件。
3. 用记事本打开_netrc文件,输入Git服务器名、用户名、密码,并保存。示例如下:
login cnblogs_user
password cnblogs_pwd
问题解决,Git更给力了!
///
Git Clone命令,大家都知道这个是克隆项目的.
当我们在服务器部署测试的时候,每次更新都需要输入账户和密码来确认,这样很麻烦,有没有一次性解决的办法呢?有!
在使用git clone 命令的时候我们可以将用户名和密码嵌入到链接,
代码格式如下:
git clone http://userName:password@链接
/
git clone http://xxx:xxxx#@gitlab.xxxn/xxxxop/scxxx.git 报错,提示
“URL using bad/illegal format or missing URL”
发现在有些linux 环境下,密码含有特殊字符的账号远程下载git就会报错。#需要转义为%23 才可以解决。
空格 - %20
" - %22
# - %23
% - %25
& - %26
( - %28
) - %29
+ - %2B
, - %2C
/ - %2F
: - %3A
; - %3B
< - %3C
= - %3D
> - %3E
? - %3F
@ - %40
\ - %5C
| - %7C
由于我使用的python ,即使用该库即可以帮我解决
import urllib.parse
data = urllib.parse.quote(url)
示例:
a=“12345678@#%&^”
data=urllib.parse.quote(a)
print (data)
12345678%40%23%25%26%5E
解码可以使用这个
urllib.parse.unquote
Git上传出现:The requested URL returned error: 403解决办法
git在 pull/push 代码的时候提示:The Requested URL return error 403,这表示我们没有权限来pull/push相关代码
修改配置文件:
/
git切换远程仓库地址
1,--切换远程仓库地址
git remote set-url origin "realUrlAddress"
2,-远程仓库地址切换后,本地代码上传
git push -u origin --all
git push -u origin --tags
完成上述两步,实现了前端源码同步到git远端。
这里的切换,没有指定特殊分支,都是origin/master
1,修改命令
git remote origin set-url URL
2.先删除后修改
git remote rm origin
git remote add origin git@github.com:shuai214/XIBTest.git
3.修改config文件
如果你的项目有加入版本控制,那可以到项目根目录下,查看隐藏文件夹,发现.git文件夹,找到其中的config文件,就可以修改其中的git remote origin地址了.
/
空文件夹上传到github仓库中的方法
方法:先在目录下的所有空文件夹下,创建一个无关文件(.gitxxx文件)。
在项目的根目录下输入命令行(用Git Bash Here打开),
find . \( -type d -empty \) -and \( -not -regex ./\.git.* \) -exec touch {}/.gitxxx \;
$ find . -type d -empty -exec touch {}/.gitignore ;
这样,在目录下的所有空文件夹下,就有.gitxxx文件了。此时,你可以上传此项目到远程服务器了,相信大家还有一个困惑,空文件夹下的.gitxxx文件,并不是我们 想看到的,所有在开发到一定阶段时,我们可以通过命令行删除所有的.gitxxx文件(无关文件)
删除当前目录下的.gitxxx文件
find ./ -type f -name '.gitxxx' -delete
这样,你就可以把目录下的所有.gitxxx文件删除了。
一些建议的解决方法
许多用户建议:
- 放置
README
具有某些内容的文件或另一个文件以使目录非空,或 .gitignore
使用某种“反向逻辑”(即包含所有文件)创建一个文件,最后,该文件的目的与方法#1 相同。
虽然这两种解决方案都有效,但我发现它们与有意义的 Git 版本控制方法不一致。
- 为什么你应该在你的项目中放置你可能并不真正想要的伪造文件或自述文件?
- 为什么要使用与它的意义(不包括文件)完全相反的
.gitignore
事情(保存文件),即使它是可能的?
为什么我们需要空的版本化文件夹
第一件事:
在 Git 版本控制系统下,空目录不能成为树的一部分。
它根本不会被跟踪。但是在某些情况下,“版本控制”空目录可能是有意义的,例如:
- 搭建预定义的文件夹结构,使其可供存储库的每个用户/贡献者使用;或者,作为上述的特殊情况,为临时文件创建一个文件夹,例如 a
cache/
或logs/
目录,我们希望在其中提供文件夹但.gitignore
其内容 - 与上述相关,某些项目在没有某些文件夹的情况下将无法工作(这通常暗示项目设计不佳,但这是一个常见的现实场景,也许可能存在需要解决的权限问题)。
一些建议的解决方法
许多用户建议:
- 放置
README
具有某些内容的文件或另一个文件以使目录非空,或 .gitignore
使用某种“反向逻辑”(即包含所有文件)创建一个文件,最后,该文件的目的与方法#1 相同。
虽然这两种解决方案都有效,但我发现它们与有意义的 Git 版本控制方法不一致。
- 为什么你应该在你的项目中放置你可能并不真正想要的伪造文件或自述文件?
- 为什么要使用与它的意义(不包括文件)完全相反的
.gitignore
事情(保存文件),即使它是可能的?
.gitkeep 方法
使用一个名为的空.gitkeep
文件来强制版本控制系统中存在该文件夹。
虽然看起来差别不大:
-
您使用的文件仅用于保存文件夹。你不要放任何你不想放的信息。
例如,您应该使用自述文件作为包含有用信息的自述文件,而不是作为保留文件夹的借口。
关注点分离总是一件好事,您仍然可以添加一个
.gitignore
来忽略不需要的文件。 -
命名它
.gitkeep
可以使文件名本身(以及其他开发人员,这对于共享项目和 Git 存储库的核心目的之一有好处)非常清晰和直接,该文件是- 与代码无关的文件(因为前导点和名称)
- 与 Git 明显相关的文件
- 它的目的(保持)被清楚地陈述和一致并且在语义上是对立的,它的意思是忽略
您可以将此 .gitignore 放在顶级目录和touch .keepdir
git 应跟踪的每个子目录中。所有其他文件都被忽略。这对于确保构建目录的结构一致很有用。
# Ignore files but not directories. * matches both files and directories
# but */ matches only directories. Both match at every directory level
# at or below this one.
*
!*/
# Git doesn't track empty directories, so track .keepdir files, which also
# tracks the containing directory.
!.keepdir
# Keep this file and the explanation of how this works
!.gitignore
!Readme.md
在这个文件夹下添加一个【.gitkeep】文件,这样就可以同步该文件夹了。
查看分支:
git branch
该命令可以查看本地分支,也可以使用参数 -a 查看所有分支。
上图中可以看到所有本地分支和远程分支,其中带 * 号的分支为当前的工作区使用的分支。
创建分支:
git branch feature#a
上面的代码演示了创建名称为feature#a的分支
迁出分支:
git checkout feature#a
以上两个命令实现了创建并使用分支feature#a的功能,它们还可以简化为一条指令:
git checkout -b feature#a
在checkout的时候添加命令 –b 即可创建并使用该分支。
删除分支:
git branch –d feature#a
当我们完成一个分支的开发,并完成合并后,可以使用-d命令删除分支。此时,如果分支未完成合并,删除时会提示失败。
如果要强制删除分支,可以使用命令-D来实现。
提交分支:
git commit feature#a
使用commit指令可以提交当前工作区被跟踪的更改。
合并分支:
git merge feature#a
使用merge指令,可以实现分支的合并。
远程操作:
以上命令都是基于本地进行操作的,并不会影响到远程的源代码。当我们完成代码后,需要将本地源码提交到远程库中,此时需要使用push指令,从远程拉去源代码需要使用pull指令。
git push –-set-upstream origin feature#a
上面的代码演示了本地新创建的分支推送到远程分支。如果已经建立了远程的关联,则只需要使用git push即可。
git pull origin dev
上面的代码演示了从远程拉取dev分支,要使用拉取的分支,只需要使用checkout指令即可。
演练:
根据本地dev分支创建feature分支,推送到远程仓库,开发完成后合并到dev分支,并删除feature分支。
- 签出dev分支
git checkout dev
- 创建feature分支,注意feature的命名格式,以feature开头,#分割,并使用新功能简要描述。
git checkout -b feature#caching
- 提交feature分支,并推送到远程仓库
git add . #将修改的文件添加到暂存区 git commit #提交到本地仓库 git push –-set-upstream origin feature#caching #推送远程仓库
- 合并到dev分支
git checkout dev #切换到dev分支 git merge feature#caching #合并feature分支 git push dev #合并完成后推送dev分支
- 删除feature分支
git branch –d feature#caching #本地删除feature分支 git push origin :heads/feature#caching #从远程删除feature分支
创建本地分支
git branch new_branch //仅创建新的本地分支
创建本地分支并切换到新的分支
//将分支切换到Dev,如果Dev不存在则创建一个Dev分支再切换到Dev git checkout -b new_branch
删除本地分支
如果本地分支已经不需要了,需要删除,
或者说创建本地分支失败,需要删除git branch -d 要删除的分支 //删除本地分支 git branch -D 要强制删除的分支 //强制删除分支
///
///
///