有没有办法使用命令git ls-files,只显示未跟踪的文件?
我问的原因是因为我使用以下命令来处理所有已删除的文件:
git ls-files -d | xargs git rm
Run Code Online (Sandbox Code Playgroud)
对于未跟踪的文件,我想要类似的东西:
git some-command --some-options | xargs git add
Run Code Online (Sandbox Code Playgroud)
我能够找到-o选项git ls-files,但这不是我想要的,因为它也显示了被忽略的文件.我还能够提出以下长而丑陋的命令:
git status --porcelain | grep '^??' | cut -c4- | xargs git add
Run Code Online (Sandbox Code Playgroud)
似乎我必须在这里使用更好的命令.如果没有,我如何创建自定义git命令?
我想访问一个裸git存储库,我想列出存储库中的所有文件.
在普通的git存储库中,我可以通过运行轻松完成git ls-files.
示例输出:
$ git ls-files
README.md
file1.js
file2.js
file3.js
folder1/file4.js
folder2/file5.js
Run Code Online (Sandbox Code Playgroud)
在一个裸git存储库中,这会无声地失败.它只是不返回任何文件(但成功退出):
$ cd my-bare-repository
$ git ls-files #returns nothing
$ echo $? #print exit code from previous command
$ 0
Run Code Online (Sandbox Code Playgroud)
现在我知道我必须提供一个有意义的分支或主要显示.但是,我怎样才能真正获得我知道的存储库中的文件列表?
在我们介绍.gitignore文件之前,已将整个BUNCH文件检入我们的git仓库.我正在尝试用以下方法清理它:
git rm --cached `git ls-files -i --exclude-from=.gitignore`
Run Code Online (Sandbox Code Playgroud)
事情是许多文件路径中都有空格.
例如:
......
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg12.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg13.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg14.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg15.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg16.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg17.png.meta
Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg18.png.meta
.......
Run Code Online (Sandbox Code Playgroud)
在我需要摆脱的整个lotta文件中有一个完整的LOTTA空间.
我正在寻找一种优雅的方式:
答:例如,用"\"来逃避空格
Assets/Aoi\ Character Pack/Viewer/Resources/Aoi/Viewer\ BackGrounds/bg18.png.meta
-要么-
B:git ls-files抽出我的文件列表,所有文件都在引号之间整齐地依偎在一起.
'Assets/Aoi Character Pack/Viewer/Resources/Aoi/Viewer BackGrounds/bg18.png.meta'
-编辑-
到目前为止我已经尝试过
git ls-files -i --exclude-from=.gitignore | sed 's/\ /\\\ /g'
虽然这很愉快地输出文件路径看起来像我期望的那样,空间被转义.....当我尝试执行时
git rm --cached `git ls-files -i --exclude-from=.gitignore | sed 's/\ /\\\ /g'` …Run Code Online (Sandbox Code Playgroud) 我试图找到一种方法来确定git存储库中的文件是否由git-lfs正确管理.
到目前为止,我发现比较结果git lfs ls-files并且git ls-files ':(attr:filter=lfs)'似乎给了我想要的东西.
Add-Type -AssemblyName 'System.Linq';
[string[]] $actualLfsFilePaths = git lfs ls-files | `
ForEach-Object `
{
#'12345678 * my.dll' - not all lfs versions support -n flag, so it is better to be conservative
$_.Split(' ', 3)[2]
};
[string[]] $shouldBeUnderLfsFilePaths = git ls-files ':(attr:filter=lfs)';
$filePathsNotUnderLfs = [System.Linq.Enumerable]::ToArray(
[System.Linq.Enumerable]::Except($shouldBeUnderLfsFilePaths, $actualLfsFilePaths)
);
$count = $filePathsNotUnderLfs.Count;
Write-Host "There are $($count) lfs files that are not under lfs";
foreach ($filePathNotUnderLfs in $filePathsNotUnderLfs)
{
Write-Host "`t'$filePathNotUnderLfs'";
} …Run Code Online (Sandbox Code Playgroud) 问题:给定git repo,显示由特定用户集修改的文件,以及这些文件的最后一个编辑器(来自该组用户).
潜在解决方案
git ls-files | xargs -n 1 git log -1 --author="example.com" --name-only --pretty=format:'%aN' --follow -p | paste -d";" - -
Run Code Online (Sandbox Code Playgroud)
这将产生所需的输出(下图),但速度很慢:
<author_a>;<file_a>
<author_b>;<file_b>
<author_b>;<file_c>
...
Run Code Online (Sandbox Code Playgroud)
有没有更快/更好的方法来做到这一点?
在 Git 中,命令返回的典型结果git ls-files -s行如下所示
100755 be2c2e9b0966253096472d4b482c458bc892e493 0 .gitignore
Run Code Online (Sandbox Code Playgroud)
这些字段是什么意思?
我想找到指定分支的基目录中的所有 markdown 文件。git ls-files有人向我建议,但文档没有提到指定分支。我希望能够在不检查该分支的情况下执行此操作。这可以做到吗?
我想运行git ls-file --modified以获取具有未暂存更改的文件列表。我惊讶地发现它可以在根目录中工作,但不能在任何子目录中工作,它只打印子目录中的文件(例如git status,与 相比)。
重现步骤:
mkdir repo
cd repo
git init
touch file.txt
git add file.txt
mkdir subdirectory
echo "foo" >> file.txt # file now has unstaged changes
git ls-files --modified # This prints 'file.txt'
cd subdirectory/
git ls-files --modified # This prints nothing
Run Code Online (Sandbox Code Playgroud)
我怎样才能改变 git 的行为呢?
目前尚不清楚git ls-files使用通配符的实际作用。
我从git ls-files *.*运行正常的命令开始。它显示了所有底层子目录中受版本控制的所有文件但现在我想选择一组文件。例子 :"Device_*.xml"
所以我执行,git ls-files Device_*.xml但这没有结果?!
我知道该命令区分大小写。怎么了?下面是我使用输出执行的命令列表。使用的 Git 版本:2.6.1.windows.1
D:\GIT\repo>git clean -xdf
D:\GIT\repo>git reset --hard
Run Code Online (Sandbox Code Playgroud)
HEAD现在在7de8f5b[IP-826-generic-configuration-management-ticket] 将远程跟踪分支 'origin' 合并到 IP-826-generic-configuration-management-ticket
D:\GIT\repo>git status
Run Code Online (Sandbox Code Playgroud)
在分支 IP-826-generic-configuration-management-ticket
您的分支机构使用“origin/IP-826-generic-configuration-management-ticket”是最新的。
Untracked files:
(use "git add <file>..." to include in what will be committed)
Run Code Online (Sandbox Code Playgroud)
没有添加任何提交但存在未跟踪的文件(使用“git add”来跟踪)
D:\GIT\repo\Imagepipe\SettingsDB\GeneratedDevicesAllPlatforms>dir Device_*.xml /s
<LOT OF DEVICE_*.xml FILES HERE>
12/10/2015 10:46 681 Device_GeneratedDevices_0-0-0_0.xml
1 File(s) 681 bytes
Directory of D:\GIT\repo\Tools\DevTools\SettingsGenerator\SLIB2_GenerateSettings\Test\DB7\GeneratedDevices\D1
12/10/2015 10:46 1,997 Device_D1_0-0-0_0.xml
1 File(s) …Run Code Online (Sandbox Code Playgroud) git ×9
git-ls-files ×9
escaping ×1
git-bare ×1
git-lfs ×1
git-rm ×1
git-stage ×1
git-status ×1
powershell ×1
tfs ×1
wildcard ×1