我已经学会了如何排除git的整个目录(添加一行bin/到.gitignore).我已经学会了如何在"事后"忽略文件(即在它们被添加到git之后):
git rm --cached <filename>
Run Code Online (Sandbox Code Playgroud)
将它添加到Git仓库后,如何忽略整个目录(例如bin/)?
我试过,git rm --cached bin/但我收到的只是错误:
致命:pathspec'bin /'与任何文件都不匹配
当我尝试(在根目录,存在.git的地方)时git rm --cached MyProj/bin/,错误是不同的:
致命的:没有-r,不能递归删除'MyProj/bin /'
这意味着什么,我现在需要提交和/或分支?
我试过了:
git branch "MyProj/bin/ ignored"
Run Code Online (Sandbox Code Playgroud)
并收到:
fatal: 'MyProj/bin/ ignored' is not a valid branch name.
Run Code Online (Sandbox Code Playgroud)
在混帐分支男子网页指向的git检查-REF-格式手册页,以获得实际的规则,一个有效的分支名称.
果然,上述致命错误的原因似乎是包含空格字符.
知道为什么,在这个时代,空间仍然被排除在分支名称之外(例如,我会在古老的CVS中预期它,但是Git?)
什么可能是有效的技术原因?
打开文件(通过键入Ctrl-x f,AKA Find File)或通过f在Dired模式下键入该文件),在具有.git子目录的工作目录中非常缓慢.
即使是最简单的文件(50行(主要是注释)也可能需要8秒才能打开.
同一个文件,在不受Git管理的不同目录中,立即打开.
为什么会发生这种情况?如何在不禁用vc-mode的情况下解决此问题?(因为我使用Emacs的主要原因之一是它M-x ediff-revision)
更新1:感谢@ sanityinc的回答,我运行了ELP Profiling,这是我收到的(对于一个非常小的文件,69行,其中59行是简单注释):
Function Name Call Count Elapsed Time Average Time
------------- ---------- ------------ ------------
vc-call-backend 11 23.023 2.093
vc-find-file-hook 1 8.757 8.757
vc-mode-line 1 7.812 7.812
vc-default-mode-line-string 1 7.345 7.345
vc-state-refresh 1 6.921 6.921
vc-state 1 6.921 6.921
vc-default-state-heuristic 1 6.921 6.921
vc-registered 1 0.945 0.945
vc-backend 1 0.945 0.945
vc-git-registered 1 0.912 …Run Code Online (Sandbox Code Playgroud) 将单个文件名传递给上下文菜单shell命令很简单:
[HKEY_CLASSES_ROOT\*\shell\MyProgram\Command]
@="program.exe %1"
Run Code Online (Sandbox Code Playgroud)
但是,如果我选择多个文件,program.exe则会为每个这样选择的文件调用.
我想要做的只是调用program.exe一次,将当前选中的所有文件名传递给它.
这该怎么做?
我即将完成将"哑快照"转换为git的繁琐过程.这个过程一直很顺利(感谢这个重命名过程),但现在我意识到我创建的一些分支不值得branch,而是一个tag.
由于一切都仍然是本地的(从未被推送到存储库),我发现这个问题(和相关的答案)比我更喜欢有点麻烦,所以我想知道我是否可以通过一些简单的"转换为分支"来获取快捷方式-tag"命令?
是否有这么简单的命令将分支转换为标签?
(我知道我可以保留它原样,但我真的很喜欢gitk突出标签的方式,帮助我轻松识别它们).
更新:感谢@ Andy在下面的回答,我设法提出了一个shell脚本,可以方便,轻松地完成所有操作.为了所有人的利益,我正在分享这个脚本,特别感谢这个伟大的社区,他为我提供了CVS to git的可能性:
#!/bin/sh
BRANCHNAME=$1
TAGNAME=$2
echo "Request to convert the branch ${BRANCHNAME} to a tag with the same name accepted."
echo "Processing..."
echo " "
git show-ref --verify --quiet refs/heads/${BRANCHNAME}
# $? == 0 means local branch with <branch-name> exists.
if [ $? == 0 ]; then
git checkout ${BRANCHNAME}
git tag ${BRANCHNAME}
git checkout master
git branch ${BRANCHNAME} -d
echo " " …Run Code Online (Sandbox Code Playgroud) 在学习了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) 当我尝试ediff-revision在Emacs 23.2.1下使用CVS管理的文件时,我在*ediff-errors*框架中收到以下错误,而不是直接开始ediff结果:
cygwin warning:
MS-DOS style path detected: c:/Users/BILL/AppData/Local/Temp/misc.cpp.~1.10~
Preferred POSIX equivalent is: /cygdrive/c/Users/BILL/AppData/Local/Temp/misc.cpp.~1.10~
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Run Code Online (Sandbox Code Playgroud)
我的问题是我已经设置了CYGWIN环境变量选项"nodosfilewarning",所以我不知道为什么我收到这个错误.
实际上,我可以在同一个Emacs实例下的劣质shell中验证这一点:
> set | grep -i nodos
CYGWIN=nodosfilewarning
Run Code Online (Sandbox Code Playgroud)
我在Windows 7下运行Cygwin 1.7.9-1,以防这可能是相关的(在从Cygwin 1.5升级到1.7之前我从未遇到过这个问题).
知道如何摆脱这个错误吗?
PS后续调用ediff-revision成功而不触发此警告.
当我输入时git branch,我会收到一个分支列表,这些分支看起来按字母顺序排序,而不是按创建时间排序.
有没有办法git branch按日期排序?