OS X 系统,使用 git 一次性导入大量文件,文件列表参数由程序自动生成, n 大于 4096 :
git add -- <file1> <file2> ... <filen>
运行命令出现错误:
too many arguments (6861) -- limit is 4096
git 高手们有遇到这种情况吗,该怎么解决?
|  |      1Neytoph      2016-04-24 09:00:34 +08:00 via iPhone  1 “ git add .”你要的应该是这个.... | 
|  |      3SelFree      2016-04-24 09:08:15 +08:00  1 =。= 6000+文件,看提示 limit is 4096 。这么多文件肯定不是手工整理的啦。分成多次或者导成 shell 呗: git add <file1> git add <file2> ... | 
|  |      4ChiangDi      2016-04-24 09:13:56 +08:00 via Android 分两次 add 呗 | 
|  |      5SelFree      2016-04-24 09:16:00 +08:00 还有这个 4096 应该是 shell 的限制 | 
|  |      7SelFree      2016-04-24 09:17:50 +08:00 @SelFree 一次 commit 就是你当前 add 的内容 git add file1 git add file2 git add filen git commit 这个时候就是 commit file1 、 file2 ... filen 啊 | 
|      9YuJianrong      2016-04-24 09:19:49 +08:00 via iPhone commit 不会有问题吧,不需要解决。 | 
|      12neoblackcap      2016-04-24 09:20:49 +08:00 若是生成文件都在一个文件夹里面的话,你 add 那个文件夹就好了 | 
|  |      13sagnitude      2016-04-24 09:22:21 +08:00 你既然知道哪些文件不想提交,剪切出来不就行了 | 
|  |      14loggerhead      2016-04-24 09:25:06 +08:00 via iPhone  1 这跟 git 无关,是 shell 的限制,可以了解一下 xargs | 
|      15lua OP | 
|      16Bardon      2016-04-24 09:33:39 +08:00  1 不知道你不想提交的文件规律性怎么样,有个暴力的办法,列出你不想 commit 的文件, echo 进.gitignore 里 等 commit 后,再从.gitignore 里删除掉 | 
|      19bikong0411      2016-04-24 09:43:28 +08:00 这是 shell 报的错,跟 git 无关 | 
|  |      20lizheming      2016-04-24 09:47:37 +08:00 如果是添加的多,不想添加的只有几个,可以 git add . 之后然后 git reset file 。当然我更推荐的是使用 git add -i 进入交互模式,可以自行选择需要 add 的文件,非常方便。 | 
|  |      21owlsec      2016-04-24 10:08:45 +08:00  1 .gitignore | 
|      22xiamx      2016-04-24 10:19:15 +08:00 echo "<file1> <file2> <filen>" | xargs git add -- | 
|      23327beckham      2016-04-24 10:49:28 +08:00 你既然能整理出<file1> <file2> <file3> 。。。。这么长的列表,那就再弄一个 bash 脚本,内容是: git add <file1> git add <file2> git add <file3> ...... | 
|      25mengzhuo      2016-04-24 11:18:29 +08:00 shell 的问题怎么能怪 git 呢 楼主的结构有问题了吧 | 
|  |      26sunjourney      2016-04-24 11:22:49 +08:00 via iPhone 这么多文件真的是项目文件吗?什么东西的源码会这样?编译后的东西不要同步了好吧? | 
|  |      27Clarencep      2016-04-24 11:25:26 +08:00 如果不想提交的文件比较少,可以先 `git add .` 然后使用 `git reset HEAD 不想提交的文件`  来排除 | 
|  |      28Ixizi      2016-04-24 11:32:09 +08:00 把要改的随便加点注释之类的,然后 git add -u | 
|  |      29Kirscheis      2016-04-24 11:33:03 +08:00 via Android 这是 shell 的问题,和 git 没关系。 echo " " | xargs git add  -- 就好了 | 
|  |      30wizardoz      2016-04-24 12:00:27 +08:00 同觉得问题不存在,不想 commit 的文件不要 add 就行了,又要 add 又不想 commit 的理由是什么? | 
|  |      32itfanr      2016-04-24 13:16:33 +08:00 git add -A | 
|  |      33kxxoling      2016-04-24 13:32:21 +08:00 git add . ;git rm xxx --cached? | 
|  |      34kxxoling      2016-04-24 13:33:22 +08:00 没提交的话 git add .; git reset xxx 应该也行。话说这么多文件就不能用通配符? | 
|  |      35xwartz      2016-04-24 13:35:16 +08:00 git add --all | 
|      36marcushbs      2016-04-24 14:23:14 +08:00 function gc { for f in `git status |grep modified|awk '{print $3}'` do git add $f done git commit -m "$1" git push } | 
|      37billlee      2016-04-24 15:02:11 +08:00 你需要 xargs | 
|  |      38hzlzh PRO 之前做 temp.im 这个服务的时候尝试过 push 100w 个文件到 github 上,是分批进行的, github 有做限制。 via https://www.v2ex.com/t/57477 后来换七牛 CDN 来存了 | 
|      39BOYPT      2016-04-24 15:58:41 +08:00 命令行长度是内核限制来的。跟 git 无关 | 
|  |      40bicoff9527      2016-04-24 17:21:47 +08:00 奇怪的想法,大概是对 git 不熟 | 
|  |      41Haku      2016-04-24 17:33:56 +08:00 too many arguments 是指参数太多,也就是命令用错的意思.... | 
|  |      42tsl0922      2016-04-24 17:41:52 +08:00 如果想忽略当前 index 内容只提交特定文件可以使用: git commit --only -m <msg> -- <file>... | 
|  |      43strwei      2016-04-24 17:45:22 +08:00 git add -A | 
|  |      44mhtt      2016-04-24 20:48:13 +08:00 via iPhone git add -A ? | 
|      45cheerzeng      2016-04-24 21:14:45 +08:00 如果是同类文件,以 python 文件为例,可以 git add *.py  至于 commit ,跟 add 几次没关系啊 | 
|  |      46pynix      2016-04-24 21:31:42 +08:00 分成 2 批。。。 | 
|  |      47wensonsmith      2016-04-24 22:07:18 +08:00 git add -A | 
|  |      48starcraft      2016-04-24 22:31:04 +08:00 via iPhone 今天也碰到了添加的问题  刚好搜了研究下-A 的命令 | 
|  |      49kirisetsz      2016-04-24 23:31:33 +08:00 这个是 shell 或者系统调用的限制解法嘛,把结果导入 xargs 转换一下吧 find . -print0 -type f | xargs -n1 git add -- 这样。 | 
|  |      50busyluo      2016-04-25 06:43:18 +08:00 via iPhone | 
|  |      51chuxiwen      2016-04-25 08:37:12 +08:00 via iPad too many arguments (6861) -- limit is 4096 这个是 shell 的限制,可以自写个 shell script 克服这个问题 http://stackoverflow.com/questions/13781216/bash-meaning-of-too-many-arguments-error-from-if-square-brackets | 
|  |      52allenforrest      2016-04-25 09:28:09 +08:00 感觉是做文件云同步,底层机制用 git 实现 | 
|  |      53darasion      2016-04-25 10:25:56 +08:00 是 shell 的限制。即便你不用 git ,删除这么多文件也是有问题的。 一般命令行参数太多了或者不能预期是多少的时候,都得用 xargs 命令展开一下。 | 
|  |      54SmiteChow      2016-04-25 17:25:17 +08:00 顶楼上,楼上说的展开就是走管道,妥妥的没问题 |