当我在分支上工作时,我想快速跳转到我的“TODO”评论。这意味着
我知道两个部分解决方案:git grep TODO具有正确的格式(将 grep.lineNumber 设置为 true),但结果太多。 git diff master... | grep TODO是一组很好的结果,但不显示文件和行号。
是否有一个选项可以告诉git diff每个更改的行添加文件名和行号前缀?(--line-prefix看起来很有希望,但似乎只需要一个固定的字符串。)
我可以通过--new-line-format=":%dn: %L"(diff - 输出行号)吗git diff?
例如,目前我的搜索结果如下所示:
$ git diff master... | grep TODO
+ // TODO use a non-fatal assertion
+ // TODO use a non-fatal assertion
+// TODO make this conditional too
Run Code Online (Sandbox Code Playgroud)
但理想情况下我想要这样:
src/foo/abc.cpp:221:+ // TODO use a non-fatal assertion
src/foo/xyz.cpp:934:+ // TODO use a non-fatal assertion …Run Code Online (Sandbox Code Playgroud) 我最近试图在社区 git 存储库上开始我自己的项目,但我遇到了一些麻烦。我是 git 的新手,但这是我一直在尝试做的事情来测试它。
我运行以下命令,它们都运行正常。
git config --global user.name "MYNAME"
git config --global user.email "MYEMAIL"
mkdir testproject
cd testproject
git init
touch README
git add README
git commit -m 'first commit'
git remote add origin git@git.xxxxx.org:community/testproject.git
Run Code Online (Sandbox Code Playgroud)
并且所有上述命令都没有错误地运行。但是,当我运行下一个命令时,出现了一个巨大的错误。
git push -u origin master
Run Code Online (Sandbox Code Playgroud)
错误是。
Counting objects: 3, done.
Writing objects: 100% (3/3), 204 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
Username for 'http://git.xxxxxx.org': MYEMAIL
Password for 'http://MYEMAIL.com@git.xxxxxx.org':
remote: /usr/local/lib/ruby/gems/2.0.0/gems/bundler-1.3.5/lib/bundler/spec_set.rb:92:in `block in materialize': Could not …Run Code Online (Sandbox Code Playgroud) 我习惯于创建一些手动制作的存储库来将代码推送到我的宠物服务器或在我的公司内部共享代码。我使用 URLssh://user@ip/folder.git作为远程添加到我的工作区。
我想知道像 GitHub 这样的服务如何在没有协议规范的情况下设置存储库 URL,比如git@github.com:igorsantos07/Restler.git.
所以我正在尝试使用命令来 rsync 具有如下结构的源文件夹:
- app.js
- .gitignore
- src/
- src/logs/
- src/logs/.gitignore
Run Code Online (Sandbox Code Playgroud)
第一个 .gitignore 将忽略一系列文件。典型的东西。第二个将如下所示:
*
!.gitignore
Run Code Online (Sandbox Code Playgroud)
当您想签入一个目录中没有任何文件时使用此技术。整个目录中可能还有更多 .gitignores - 这只是一种情况。所以我的问题是:是否可以让 rsync 解释相对于它们所在目录的所有 .gitignores?
我最初的尝试如下:
rsync --exclude-from=.gitignore --exclude-from=src/logs/.gitignore --exclude-from=some/other/folder/.gitignore [source] [destination]
但是,这对我来说并没有达到预期。一切都被忽略了,因为它正在读取所有 .gitignore 文件,就好像它们在根目录下一样。有没有可能的方法来做到这一点,而不必为所有 .gitignores 进行 grep 并创建一个主文件,其中重写的路径都相对于根目录?
谢谢!
我在带有 git 1.7.1 的 cygwin 上使用 bash 版本 4.1.2(1)-release (x86_64-redhat-linux-gnu)。我想为需要使用输入参数两次的命令创建别名。按照这些说明,我写了
[alias]
branch-excise = !sh -c 'git branch -D $1; git push origin --delete $1' --
Run Code Online (Sandbox Code Playgroud)
我收到这个错误:
$> git branch-excise my-branch
sh: -c: line 0: unexpected EOF while looking for matching `''
sh: -c: line 1: syntax error: unexpected end of file
Run Code Online (Sandbox Code Playgroud)
我最后尝试了 a-和 a --,但我得到了同样的错误。我怎样才能解决这个问题?
我一直在使用 git 的(彩色)--word-diff,我觉得它很棒。我今天发现自己处于一种情况,我需要一个字一个字地比较两个字符串,并渴望像 git 的 diff 这样的东西。
我知道wdiff+ colordiff,但它的结果肯定不是很好:
me@me:~$ wdiff <(echo -e "abc\ndef") <(echo -e "dbcx\ndef") | colordiff
[-abc-]{+dbcx+}
def
Run Code Online (Sandbox Code Playgroud)
周围有更好的选择吗?我不是特别喜欢那些[-,-]和{+, +}。
我在 Arch linux 中的证书有问题。好像找不到ca-certificates.crt。我已经更新了我的系统并安装了ca-certificates{,-utils,-mozilla}软件包,但它仍然无法正常工作。
git clone http://github.com/sstephenson/bats.git
Cloning into 'bats'...
fatal: unable to access 'https://github.com/sstephenson/bats.git/': error setting certificate verify locations:
CAfile: /etc/ssl/certs/ca-certificates.crt
CApath: none
Run Code Online (Sandbox Code Playgroud) 通常情况下diff,并git diff同时显示原始的和与修改后的行-和+分别。有什么办法,我只能过滤才能看到修改后的行吗?这将立即将要读取的行数减少 2 倍。
我假设
git diff test.yml | grep '^+' | less -R
Run Code Online (Sandbox Code Playgroud)
和
git diff test.yml | egrep '^+' | less -R
Run Code Online (Sandbox Code Playgroud)
有相同的结果。即他们会在文件中显示任何新添加的内容。但是egrep向我展示了整个文件。为什么呢?
无论如何,使用上述方法,我失去了颜色。有什么办法可以保持颜色吗?
-n用作 grep 参数来显示行号,但-H不适用于文件名。我认为这是因为git diff默认情况下不会为每个更改的行输出文件名。在我打字时,我考虑了显示多行的另一种选择,它解决了我的直接问题,但仍然想知道显示实际文件名的解决方案。
[michael@bigbox www]$ git diff | grep -n -H "this->config"
(standard input):614:- $config=json_decode($this->config,true);
[michael@bigbox www]$
Run Code Online (Sandbox Code Playgroud) 在我的zshshell 中,我根据我是否在git存储库中动态更改提示。我正在使用以下 git 命令来检查:
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1); then
...
Run Code Online (Sandbox Code Playgroud)
现在我还想区分当前目录是否被git. 所以我在我的if声明中又添加了一张支票:
if $(git rev-parse --is-inside-work-tree >/dev/null 2>&1) && ! $(git check-ignore . >/dev/null 2>&1); then
...
Run Code Online (Sandbox Code Playgroud)
这工作正常,但我想知道是否可以将其简化为一个git命令。由于在每个 上都会刷新提示ENTER,因此在某些较慢的机器上,它往往会显着降低 shell 的速度。
@Stephen Kitt 接受的解决方案效果很好,但以下情况除外:
我正在跨文件系统使用存储库。让我们说 git 驻留在/.git(因为我想跟踪我的配置文件/etc),但我也想跟踪一些文件/var/foo,这是一个不同的分区/文件系统。
当我位于/并执行以下命令时,一切都按预期工作,并且我得到返回代码1(因为/var/foo正在被跟踪):
# git check-ignore -q /var/foo
Run Code Online (Sandbox Code Playgroud)
但是,当我位于 中的任何位置时/var,相同的命令会失败并显示错误代码128和以下错误消息:
# git check-ignore -q …Run Code Online (Sandbox Code Playgroud) git ×10
diff ×3
grep ×2
arch-linux ×1
bash ×1
certificates ×1
colordiff ×1
colors ×1
curl ×1
prompt ×1
rsync ×1
ruby ×1
shell-script ×1
ssh ×1
zsh ×1