在学习了Git的几个障碍之后,我遇到了一个新的挑战:重命名目录(在本地,在工作目录中).
当我键入时git status,它会将旧目录名中的所有文件(在新目录中存在与新目录中完全相同的文件名)列为已删除,新目录名称为"未跟踪".
有没有办法告诉Git"它实际上是同一个目录,只是一个不同的名字"?
这样所有文件都只会被git status修改列出 ?
举例来说,这是git status我重命名整个目录时收到的输出:
git status
# On branch master
# Changes not staged for commit:
# (use "git add/rm <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# deleted: old-dir-name/file1
# deleted: old-dir-name/file2
# deleted: old-dir-name/file3
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# …Run Code Online (Sandbox Code Playgroud) 在推送到我的远程Git仓库并完全放弃SVN之前,将git-svn init/git-svn提取到本地Git分支/标记之后,使远程分支/标记存在的正确方法是什么?
我有:
git svn init 将svn-remote "svn".git/config文件的部分更新为以下内容:
url = file:///Users/Developers/git_transition/svn_repo
fetch = cascade/trunk:refs/remotes/svn/trunk
branches = cascade/branches/{5.0GA_CLEANUP,drag-n-drop-def-builder,help-text,hib-annotations,hibernate-annotations,image-editor,ldapconfig,liquibase,move-rename-prototype,progress-bar,progress-bar2,quartz-upgrade,recyclebin,rendering_metrics,shuttle_upgrade,spring3,web-services-no-nuller}:refs/remotes/svn/*
branches = cascade/branches/{6.x,5.x,4.x,3.x,archive}/*:refs/remotes/svn/*
tags = cascade/tags/{3.7.x,4.x,5.x,6.x,old-releases}/*:refs/remotes/svn/tags/*
Run Code Online (Sandbox Code Playgroud)跑 git svn fetch
是否git-svn clone做一些超出的init /取,轮流这些分支/标签为当地的呢?
我尝试了关于Pro Git的建议,但除了空的6.x,5.x,4.x,3.x,标签和存档目录之外,.git/refs/remotes/svn /目录中没有任何内容.我确实验证了远程分支在那里git branch -r.
有人建议我需要系统地检查所有远程分支机构作为本地分支机构:git checkout -b <local_branch_name> <svn_remote_branch_name>但我没有得到任何确定的答案.
我已经能够使用该脚本来CONVER标签:
git for-each-ref --format="%(refname)" refs/remotes/svn/tags/6.x |
grep -v @ | while read tag; do GIT_COMMITTER_DATE="$(git log -1
--pretty=format:"%ad" "$tag")" GIT_COMMITTER_EMAIL="$(git log -1
--pretty=format:"%ce" "$tag")" GIT_COMMITTER_NAME="$(git …Run Code Online (Sandbox Code Playgroud) 我正在寻找将git分支转换为git标签的最佳和最安全的方法.当手动移植到svn存储库时,我基本上复制了我们所有的分支,并且我们为每个次要版本(1.1,1.2,1.3)都有一个分支,这一点可能并不是最好的方法,但为了速度,我对分支比当时的标签更舒服.我现在有分支1.5,1.6,1.7,1.8但是因为我们在任何给定时间只有1个版本的代码部署,我可能只需要最后一个版本作为分支,因为任何热修复需要进入该版本部署.所以我正在寻找将git分支转换为git标签的最佳方法.我想我有办法,但确定它有多好.
到目前为止我所做的是每个我想转换为标签的分支,我已经检查过以确保那些不在master分支中的分支中没有提交,所以我做了:
git log 1.5 ^master
git log 1.6 ^master
git log 1.7 ^master
Run Code Online (Sandbox Code Playgroud)
所有这些都没有给我任何回报,我认为这意味着这些分支中的所有提交都存在于master中.我这样做是因为我假设如果那些分支中的提交不在master中,我会在将分支转换为标记时丢失它们,因为标记只是一个提交而不是开发线的"指针".看起来很好,我的假设是我只需做:
git tag 1.5v 1.5
git tag 1.6v 1.6
git tag 1.7v 1.7
Run Code Online (Sandbox Code Playgroud)
然后我只需要在本地删除分支并将这些更改推送到远程存储库.这是将git分支转换为git标记的最佳方法吗?
我还有一个问题是,如果有人从1.7开始创建一个分支(没有人应该这样做)并且他们拉出删除该分支的更改,他们是否能够将这些更改合并到另一个分支(比如master)或者那种打破他们创建的分支?这是一个不应该发生的情况,因为除了最后一个版本之外没有人应该创建任何分支版本的分支,在这种情况下为1.8,但是人们并不总是正确地遵循过程,所以我想确保有一种方法如果它发生,解决这个问题.