簡體   English   中英

在git HEAD中查找所有二進制文件

[英]Find all binary files in git HEAD

我有一個巨大的git repo,最終想用bfg清理
但首先,我想跟蹤並刪除HEAD中的文件,git將其視為二進制文件...

所以,我正在尋找的是一個命令來查找HEAD中git視為二進制文件的所有文件

這些沒有幫助:

預先感謝您的幫助。

diff <(git grep -Ic '') <(git grep -c '') | grep '^>' | cut -d : -f 1 | cut -d ' ' -f 2-

打破它:

  • git grep -c ''打印存儲庫中每個文件的名稱和行數。 添加-I選項使命令忽略二進制文件。
  • diff <(cmd1) <(cmd2)使用進程替換為diff提供命名管道,通過該管道發送cmd1cmd2的輸出。
  • grepcut命令用於從diff的輸出中提取文件名。

基於@jangler答案的簡化解決方案( https://stackoverflow.com/a/30690662/808101

comm -13 <(git grep -Il '' | sort -u) <(git grep -al '' | sort -u)

說明:

  1. git grep

    • -l要求只打印匹配模式''的文件的文件名(應與每個文件的每一行匹配)
    • -I此選項使命令忽略二進制文件
    • -a此選項強制處理二進制文件,就像它們是文本一樣
  2. sort -u對grep的結果進行排序,因為comm只處理已排序的文件

  3. comm -13列出第二個列表唯一的文件( git grep列表包含所有文件,包括二進制文件)

以下是使用PowerShell的Windows的相同腳本:

$textFiles = git grep -Il .
$allFiles = git ls-files

foreach ($line in $allFiles){
    if ($textFiles -notcontains $line) {
        $line;
    }
}

或者是簡短的形式:

$textFiles = git grep -Il .
git ls-files | where { $textFiles -notcontains $_ }

這需要O(n^2)來完成,這是使用哈希表的更快方法:

$files = @{}
git ls-files | foreach { $files[$_] = 1 }
git grep -Il . | foreach { $files[$_] = 0 }
$files.GetEnumerator() | where Value -EQ 1 | sort Name | select -ExpandProperty Name

這需要O(n)來完成。

grep -Fvxf <(git grep -Il '') <(git grep -al '')

說明:

還要考慮使用git add但尚未提交的文件:

grep -Fvxf <(git grep --cached -Il '') <(git grep --cached -al '')

或者您可以在git ls-files上執行for循環, 如何確定Git是將文件處理為二進制還是文本?

使用此測試存儲庫在Git 2.16.1上進行了測試

從文件中刪除 git 頭 &lt;&lt;&lt;&lt;&lt; <head< div><div id="text_translate"><p> 我有一點獨特的情況。 一個包含大型庫的文件夾已提交到我們的 repo 中,其中仍有 get 標頭(例如: &lt;&lt;&lt;&lt;&lt;&lt;&lt;Head )。 然而,這些不被 git 識別,也沒有被列為沖突。 就 git 而言,一切都很好。 但是,這些標頭的存在使庫無法運行。 我知道每個人的第一個沖動就是說,“這不可能發生,這就是 git 的全部意義所在。” 好吧,它已經發生了,看來我需要從這個庫中手動清除這些標題。</p><p> 這是 git git reset --hard和git commit后的git status</p><pre> On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean</pre><p> 這里試圖在庫中運行一個文件:</p><pre> pip freeze Traceback (most recent call last): File "C:\Users\jmarshall\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "C:\Users\jmarshall\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Users\jmarshall\source\repos\MediaDesignGroup\ETLApp_Dev\ETLApp\ETLAppEnv_3_7\Scripts\pip.exe\__main__.py", line 5, in &lt;module&gt; File "c:\users\jmarshall\source\repos\mediadesigngroup\etlapp_dev\etlapp\etlappenv_3_7\lib\site-packages\pip\_internal\cli\main.py", line 60 &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD ^ IndentationError: expected an indented block</pre> </div></head<>

[英]remove git head from files <<<<<<head

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

相關問題 Git找到歷史記錄中的所有二進制文件 Git查找所有分支的頭部提交 在倉庫中查找所有包含字符串“ &lt;&lt;&lt;&lt;&lt; HEAD”的文件 GIT損壞的文件(&lt;&lt;&lt;&lt;&lt;&lt;&lt; 在Git倉庫中,我如何遞歸查找所有二進制類型文件,並獲得總大小? git p4 clone無法獲取@ rev,#head的所有文件 Bash / xargs技巧打開git HEAD中所有已更改的文件 對 git 中超出 HEAD 的所有文件運行預提交 從文件中刪除 git 頭 &lt;&lt;&lt;&lt;&lt; <head< div><div id="text_translate"><p> 我有一點獨特的情況。 一個包含大型庫的文件夾已提交到我們的 repo 中,其中仍有 get 標頭(例如: &lt;&lt;&lt;&lt;&lt;&lt;&lt;Head )。 然而,這些不被 git 識別,也沒有被列為沖突。 就 git 而言,一切都很好。 但是,這些標頭的存在使庫無法運行。 我知道每個人的第一個沖動就是說,“這不可能發生,這就是 git 的全部意義所在。” 好吧,它已經發生了,看來我需要從這個庫中手動清除這些標題。</p><p> 這是 git git reset --hard和git commit后的git status</p><pre> On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to publish your local commits) nothing to commit, working tree clean</pre><p> 這里試圖在庫中運行一個文件:</p><pre> pip freeze Traceback (most recent call last): File "C:\Users\jmarshall\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "C:\Users\jmarshall\AppData\Local\Programs\Python\Python37\lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Users\jmarshall\source\repos\MediaDesignGroup\ETLApp_Dev\ETLApp\ETLAppEnv_3_7\Scripts\pip.exe\__main__.py", line 5, in &lt;module&gt; File "c:\users\jmarshall\source\repos\mediadesigngroup\etlapp_dev\etlapp\etlappenv_3_7\lib\site-packages\pip\_internal\cli\main.py", line 60 &lt;&lt;&lt;&lt;&lt;&lt;&lt; HEAD ^ IndentationError: expected an indented block</pre> </div></head<> GIT添加后,所有文件上的500 Internal Server Error
 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM