我阅读了Git手册,常见问题解答,Git - SVN速成课程等等,他们都解释了这个和那个,但是你无处可以找到一个简单的指令:
SVN存储库: svn://myserver/path/to/svn/repos
Git存储库: git://myserver/path/to/git/repos
git-do-the-magic-svn-import-with-history \
svn://myserver/path/to/svn/repos \
git://myserver/path/to/git/repos
Run Code Online (Sandbox Code Playgroud)
我不希望它那么简单,我不指望它是一个单一的命令.但我确实希望它不要试图解释任何事情 - 只是说这个例子采取了哪些步骤.
在做的git diff
时候会说"文件末尾没有新行".
好的,文件末尾没有换行符.有什么大不了的?
这条消息有什么意义,它试图告诉我们什么?
我知道我可以使用该git diff
命令来检查更改,但据我所知,它是基于目录的.这意味着它提供了当前目录中所有文件的所有更改.
如何仅检查一个特定文件中的更改?说,我已经更改了文件file_1.rb
,file_2.rb
...,file_N.rb
但我只对文件中的更改感兴趣file_2.rb
.我如何检查这些更改(在我提交之前)?
我一直在用Git完成所有工作并推送到GitHub.我对软件和网站都非常满意,我不想在此时改变我的工作方式.
我的博士生顾问要求所有学生将他们的工作保存在大学托管的SVN存储库中.我已经找到大量关于将现有SVN存储库下载到Git中的文档和教程,但没有关于将Git存储库推送到新的SVN存储库.我希望必须有一些方法来实现这一点,结合使用git-svn和一个新的分支和变基和所有那些精彩的术语,但我是一个Git新手,并且对它们中的任何一个都没有信心.
然后我想在我选择时运行几个命令将提交推送到该SVN存储库.我希望继续使用Git,只是拥有SVN存储库镜像Git中的内容.
如果这有任何不同,我将是唯一一个承诺进入SVN的人.
问题
如何使用来自Subversion存储库的git-svn创建浅表副本,例如,如何仅提取最后三个修订版?
git clone
如果您使用该选项--depth
,该命令可以从Git存储库获取最后n个修订版,即您获得存储库的浅表副本.例:
git clone --depth 3 git://some/repo myshallowcopyrepo
Run Code Online (Sandbox Code Playgroud)
git-svn有类似的选择吗?
到目前为止我的发现
到目前为止,我只找到了-rN
选项在哪里N
进行修改.例:
git svn clone -rN svn://some/repo
Run Code Online (Sandbox Code Playgroud)
根据文档,有可能使用-r$REVNUMBER:HEAD
.我尝试了以下内容来获取最后3个修订版,它们返回了一条错误消息.
$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn
Run Code Online (Sandbox Code Playgroud)
所以我用HEAD~3
第三个但最后一个修订版534的实际数字替换了.这有效,但这要求我首先找出第三个但最后一个提交的修订号.
$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .
Run Code Online (Sandbox Code Playgroud)
文档
基本问题:如何将git repo与其克隆的来源解除关联?
git branch -a
说明:
* master
remotes/origin/HEAD -> origin/master
Run Code Online (Sandbox Code Playgroud)
我想删除所有原产地知识和相关修订.
更长的问题:我想采用一个现有的subversion repo并从中做出一些较小的git repos.每个新的git repos都应该包含相关分支的完整历史记录.我可以使用以下命令将repo修剪为只需要的子树:
git filter-branch --subdirectory-filter path/to/subtree HEAD
Run Code Online (Sandbox Code Playgroud)
但是生成的repo仍然包含origin/master分支下现在丢弃的子树的所有修订版.
我意识到我可以使用-T标志来git-svn来首先克隆subversion repo的相关子树.我不确定这是否比后来运行git filter-branch --subdirectory-filter
git repo副本的多个实例更有效,但无论如何,我仍然希望打破与原点的链接.
我有一个跟踪svn存储库的git存储库.我用它克隆了它--stdlayout
.
我通过创建了一个新的本地分支 git checkout -b foobar
现在我希望这个分支最终…/branches/foobar
进入svn存储库.
我该怎么做?
(剪了很多调查文本.如果你关心,请查看问题历史)
我正在使用git-svn
我公司的中央git branch -r
存储库.我们最近在中央仓库中创建了一个新功能分支.我怎么fetch
说呢?当我跑步时,git-svn
我只能看到当我git branch -r
与fetch
仓库对抗以初始化我的git-svn
仓库时存在的分支?
我可以告诉git忽略被修改(删除)但不应该被提交的文件吗?
情况是我在repo中有一个子目录,其中包含我根本不感兴趣的东西,因此我将其删除以防止它出现在自动完成等中(在IDE中).
但是现在,如果我将该文件夹添加到.gitignore,只是没有任何变化,所有的东西都显示为被git status删除.
有没有办法让git忽略它?
(或者,因为我正在使用git-svn,我可以将更改提交给本地git并确保它们不会传递给svn repo吗?)