我有我的Git存储库,它在根目录下有两个子目录:
/finisht
/static
Run Code Online (Sandbox Code Playgroud)
当这是在SVN,/finisht
在一个地方签出,而/static
在其他地方查出来,像这样:
svn co svn+ssh://admin@domain.com/home/admin/repos/finisht/static static
Run Code Online (Sandbox Code Playgroud)
有没有办法用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 rm -r --cached wordpress/wp-content/uploads
Run Code Online (Sandbox Code Playgroud)
然后我添加了.gitignore的路径
/wordpress/wp-content/uploads
Run Code Online (Sandbox Code Playgroud)
但是当我跑步时,git status
他们显示为已删除.如果我尝试提交更改,则文件将被删除,不仅会从跟踪中删除.
我究竟做错了什么?
我也试过了
git update-index --assume-unchanged <file>
Run Code Online (Sandbox Code Playgroud)
但这似乎只解开文件.但我需要从跟踪中删除整个文件夹(包括子文件夹).
我们曾经在一个Rails应用程序中有一个本地黑客的delayed_job,在vendor/plugins/delayed_job中.它作为一次性事件安装并在主应用程序仓库中检入git.
现在我们决定在github上fork delayed_job并用git子模块替换子目录,如下所述:
http://doblock.com/articles/using-git-submodules-to-manage-plugins-in-rails
在此之前,我只是删除了vendor/plugins/delayed_job,而没有将其检入.现在,尽管添加了子模块,主repo中的git status仍显示vendor/plugins/delayed_job中的新文件.
我们应该如何处理删除作为repo一部分的子目录并使其保存git子模块的情况?在将子模块克隆到其位置之前,我们是应该首先使用git rm删除它,还是更彻底地删除它?
我目前正在将 cvs 项目导入 git。
导入后,我想重写历史记录以将现有目录移动到单独的子模块中。
假设我有这样的结构:
file1
file2
file3
dir1
dir2
library
现在我想重写历史记录,以便该目录library
始终是 git 子模块。比如说,将指定的目录拆分为它们自己的子模块/子项目
这是我当前的代码:
文件重写子模块(被调用)
cd project
git filter-branch --tree-filter $PWD/../$0-tree-filter --tag-name-filter cat -- --all
Run Code Online (Sandbox Code Playgroud)
文件重写子模块树过滤器
#!/bin/bash 函数 gitCommit() { 取消设置 GIT_DIR 取消设置 GIT_WORK_TREE git添加-A if [ -n "$(git diff --cached --name-only)" ] 然后 # 需要提交的东西 git 提交 -F $_msg 菲 } _git_dir=$GIT_DIR _git_work_tree=$GIT_WORK_TREE 取消设置 GIT_DIR 取消设置 GIT_WORK_TREE _dir=$PWD 如果[-d“库”] 然后 _msg=$(临时文件) git 日志 ${GIT_COMMIT}^! --format="%B" > $_msg git rm -r --缓存库 光盘库 …
git url-rewriting subproject git-submodules git-filter-branch