我认为它应该工作复制到被重命名为与所需名称的新目录的目录,并删除旧的目录,并且git add, git commit和push一切.但这是最好的方法吗?
我手动移动了一个文件,然后我修改了它.根据Git,它是一个新文件和一个删除文件.有没有办法强迫Git将其视为文件移动?
我们的Git存储库最初是作为单个怪物SVN存储库的一部分开始的,其中每个项目都有自己的树,如下所示:
project1/branches
/tags
/trunk
project2/branches
/tags
/trunk
Run Code Online (Sandbox Code Playgroud)
显然,将文件从一个文件移动到另一个文件非常容易svn mv.但在Git中,每个项目都在自己的存储库中,今天我被要求将子目录从中移动project2到project1.我做了这样的事情:
$ git clone project2
$ cd project2
$ git filter-branch --subdirectory-filter deeply/buried/java/source/directory/A -- --all
$ git remote rm origin # so I don't accidentally the repo ;-)
$ mkdir -p deeply/buried/different/java/source/directory/B
$ for f in *.java; do
> git mv $f deeply/buried/different/java/source/directory/B
> done
$ git commit -m "moved files to new subdirectory"
$ cd ..
$
$ git clone project1
$ cd project1
$ …Run Code Online (Sandbox Code Playgroud) 据我所知,Git并不需要跟踪文件重命名/移动/复制操作,那么git mv的真正目的是什么?手册页不是特别描述性的......
它已经过时了吗?它是一个内部命令,不是普通用户使用的吗?
如何将项目移动到Visual Studio中的其他文件夹?我习惯于在我的项目中使用这个结构.
-- app
---- Project.Something
---- Project.SomethingElse
Run Code Online (Sandbox Code Playgroud)
我想将整个命名空间SomethingElse重命名为SomethingNew,最好的方法是什么(没有手动进入.sln文件)?
我对git比较新,我之前使用过Subversion.
我注意到,如果文件已重命名,大多数图形git前端和IDE插件似乎都无法显示文件的历史记录.我用的时候
git log --follow
Run Code Online (Sandbox Code Playgroud)
在命令行上,我可以看到重命名的整个日志.
根据Linus Torvalds的说法--follow switch是一个"SVN noob",严肃的git用户不使用它:
--follow是一个彻底的黑客,意味着只是满足前SVN用户,他们从来不知道任何事情,如父母身份或漂亮的修订图表无论如何.
这并不是完全基本的,但是" - follow"的当前实现实际上是一个快速的预处理事物,它固定在修订行走逻辑上,而不是真正的整体.
它实际上被设计为"SVN noob",而不是"真正的git功能".我们的想法是,你要摆脱思维的(破碎)思维方式,重新命名大局.
我的问题:你们中的硬核git用户如何在重命名时获取文件的历史记录?这样做的"真实"方法是什么?
我已经重命名了几个文件git mv,使用git stash过,快速查看了HEAD(没有更改它),然后又git stash pop重新获得了全部.我的动作已经从提交列表中消失了,所以我重新使用它们git rm并且提交消息声称git发现重命名是重命名.所以我没想到它.
但是现在,提交后,我无法获取移动文件的历史记录!以下是git对有关提交的说法:
~/projects% git log --summary
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
delete mode 100644 test/R_DebugUI_iOS.h
delete mode 100644 test/R_DebugUI_iOS.m
create mode 100644 system/runtime/src/R_DebugUI_iOS.h
create mode 100644 system/runtime/src/R_DebugUI_iOS.m
<<snip older commits>>
~/projects%
Run Code Online (Sandbox Code Playgroud)
我现在正试图获取其中一个移动文件的历史记录,所以我可以看一个旧版本,但我没有得到任何非常有用的东西:
~/projects/system/runtime/src% git log --follow --find-copies-harder -M -C R_DebugUI_iOS.m
commit de6e9fa2179ae17ec35a5c368d246f19da27f93a
Author: brone
Date: Wed Dec 8 22:37:54 2010 +0000
Moved R_DebugUI into runtime
~/projects/system/runtime/src%
Run Code Online (Sandbox Code Playgroud)
(我也尝试过没有 …
我在没有考虑的情况下手动移动了一堆文件,并且找不到让git认识到文件只是被移动而不是实际上不同的文件的方法.有没有办法做到这一点,除了删除旧的和添加新的(从而丢失历史),或使用git-mv重做所有更改?
我有一个git存储库,其结构如下所示:
+--repo.git
|
+----+bootstrap.py
+----+buildout.cfg
+----+.gitignore
+----+webapp
|
+---------+manage.py
+---------+modules
+---------+templates
+---------+static
+---------+...
+---------+...
Run Code Online (Sandbox Code Playgroud)
我想将webapp文件夹的内容向上移动一级.我的结果回购应该是这样的:
+--repo.git
|
+----+bootstrap.py
+----+buildout.cfg
+----+.gitignore
+----+manage.py
+----+modules
+----+templates
+----+static
+----+...
+----+...
Run Code Online (Sandbox Code Playgroud)
我可以通过简单地将webapp目录的所有文件移动一级,删除空webapp目录然后提交更改来完成此操作吗?这会保留webapp目录下文件的提交历史吗?
虽然对很多人来说这是一个非常简单的问题,但我想确定一下.我想要的最后一件事就是喝汤.
我尝试移动文件,但我丢失了提交历史记录,因为git没有真正处理移动或重命名.我知道即使它在日志中显示为新文件,仍然可以使用一些选项查看文件的提交历史记录git log.
根据我的阅读,实现这一目标的最佳方法是使用git-filter.我对shell或git不是很好,所以有人可以告诉我我需要执行上述操作.
我得到了一个git repo current我是唯一使用它的人.我想把根文件夹下的所有文件和文件夹放在一个新的文件夹中,例如:
当前的根目录
main -> src res
新根
main ->
app1
src
res
如何在Windows上使用git而不会丢失历史记录?