相关疑难解决方法(0)

如何让git status只显示暂存文件

我想获得一个只有分阶段文件名的列表.我找不到--name-onlygit status命令的等效标志.什么是好的选择?

文件列表将通过管道传递给php -l(PHP lint语法检查器).

解决方案:完整的命令

git diff --name-only --cached | xargs -l php -l
Run Code Online (Sandbox Code Playgroud)

git git-status

73
推荐指数
4
解决办法
3万
查看次数

你可以在git commit期间更改文件内容吗?

在GitHub的开放小说中保留的一个东西是我想自动设置第一行的单词列表,这是字典中单词的数量.我的第一个选择是编写一个预提交钩子,它读取文件,计算单词,重写第一行并再次写回.这是代码

PRE_COMMIT {
  my ($git) = @_;
  my $branch =  $git->command(qw/rev-parse --abbrev-ref HEAD/);
  say "Pre-commit hook in $branch";
  if ( $branch =~ /master/ ) {
     my $changed = $git->command(qw/show --name-status/);
     my @changed_files = ($changed =~ /\s\w\s+(\S+)/g);
     if ( $words ~~ @changed_files ) {
       my @words_content = read_file( $words );
       say "I have $#words_content words";
       $words_content[0] = "$#words_content\n";
       write_file( $words, @words_content );
     }
   }
};
Run Code Online (Sandbox Code Playgroud)

但是,由于该文件已经暂存,我收到此错误

错误:checkout将覆盖对以下文件的本地更改:text/words.dic请在提交更改或存储更改之前切换分支.中止

可能最好将它作为一个后提交钩子并将其更改为下一次提交?或者做一些完全不同的事情?一般问题是:如果您想在提交期间处理和更改文件的内容,那么正确的方法是什么?

git hook commit

24
推荐指数
2
解决办法
2万
查看次数

如何在预提交钩子中正确git stash/pop以获得一个干净的工作树进行测试?

我正在尝试使用一系列单元测试进行预提交钩子,我想确保我的工作目录是干净的.编译需要很长时间,所以我希望尽可能利用重用编译的二进制文件.我的脚本遵循我在网上看到的例子:

# Stash changes
git stash -q --keep-index

# Run tests
...

# Restore changes
git stash pop -q
Run Code Online (Sandbox Code Playgroud)

这会导致问题.这是repro:

  1. 添加// Step 1a.java
  2. git add .
  3. 添加// Step 2a.java
  4. git commit
    1. git stash -q --keep-index #存储更改
    2. 运行测试
    3. git stash pop -q #恢复更改

此时我遇到了问题.该git stash pop -q显然有冲突,a.java我有

// Step 1
<<<<<<< Updated upstream
=======
// Step 2
>>>>>>> Stashed changes
Run Code Online (Sandbox Code Playgroud)

有没有办法让这个流畅干净?

git git-stash githooks

24
推荐指数
1
解决办法
5577
查看次数

git预提交钩子代码格式化与部分提交?

是有办法有一个pre-commit钩子,其自动格式化代码(例如用astyle),但并没有破坏的部分提交吗?

工作流程:

# edit a file.txt
git add -p file.txt
# add one chunk, but not another

git commit -m 'a message'
[PRE_COMMIT_HOOK] Formatting source code

git status
# the "another" chunk is still not added
Run Code Online (Sandbox Code Playgroud)

我的问题是,如果你git add在预提交钩子里面做了一个,这是在脚本格式化源代码之后需要的,那么也添加了"另一个"块.但我不希望这样.

有没有办法实现这个目标?

git formatting pre-commit-hook githooks

8
推荐指数
1
解决办法
4113
查看次数