V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
lua
V2EX  ›  git

git 无法一次性 add / commit 大量文件?

  •  
  •   lua · Apr 24, 2016 · 17694 views
    This topic created in 3662 days ago, the information mentioned may be changed or developed.

    OS X 系统,使用 git 一次性导入大量文件,文件列表参数由程序自动生成, n 大于 4096 :

    git add -- <file1> <file2> ... <filen>
    

    运行命令出现错误:

    too many arguments (6861) -- limit is 4096

    git 高手们有遇到这种情况吗,该怎么解决?

    54 replies    2016-04-25 17:25:17 +08:00
    Neytoph
        1
    Neytoph  
       Apr 24, 2016 via iPhone   ❤️ 1
    “ git add .”你要的应该是这个....
    lua
        2
    lua  
    OP
       Apr 24, 2016
    @Neytoph "git add ." 是添加全部,但现在需要 add / commit 任意指定的文件
    SelFree
        3
    SelFree  
       Apr 24, 2016   ❤️ 1
    =。= 6000+文件,看提示 limit is 4096 。这么多文件肯定不是手工整理的啦。分成多次或者导成 shell 呗:
    git add <file1>
    git add <file2>
    ...
    ChiangDi
        4
    ChiangDi  
       Apr 24, 2016 via Android
    分两次 add 呗
    SelFree
        5
    SelFree  
       Apr 24, 2016
    还有这个 4096 应该是 shell 的限制
    lua
        6
    lua  
    OP
       Apr 24, 2016
    @SelFree 分批 add 确实没问题, commit 该如何解决,也是需要指定任意文件
    SelFree
        7
    SelFree  
       Apr 24, 2016
    @SelFree 一次 commit 就是你当前 add 的内容
    git add file1
    git add file2
    git add filen
    git commit
    这个时候就是 commit file1 、 file2 ... filen 啊
    SelFree
        8
    SelFree  
       Apr 24, 2016
    @lua 看上一条
    YuJianrong
        9
    YuJianrong  
       Apr 24, 2016 via iPhone
    commit 不会有问题吧,不需要解决。
    lua
        10
    lua  
    OP
       Apr 24, 2016
    @SelFree 有些文件暂时还不想一起提交
    SelFree
        11
    SelFree  
       Apr 24, 2016
    @lua
    不想提交的就不要 add 啊。。。
    neoblackcap
        12
    neoblackcap  
       Apr 24, 2016
    若是生成文件都在一个文件夹里面的话,你 add 那个文件夹就好了
    sagnitude
        13
    sagnitude  
       Apr 24, 2016
    你既然知道哪些文件不想提交,剪切出来不就行了
    loggerhead
        14
    loggerhead  
       Apr 24, 2016 via iPhone   ❤️ 1
    这跟 git 无关,是 shell 的限制,可以了解一下 xargs
    lua
        15
    lua  
    OP
       Apr 24, 2016
    @SelFree 使用场景是在 GUI 中,希望能够精确指定所有文件

    @loggerhead 不知道有没有办法修改或者绕过这个限制
    xmgit
        16
    xmgit  
       Apr 24, 2016   ❤️ 1
    不知道你不想提交的文件规律性怎么样,有个暴力的办法,列出你不想 commit 的文件, echo 进.gitignore 里
    等 commit 后,再从.gitignore 里删除掉
    SelFree
        17
    SelFree  
       Apr 24, 2016
    @lua 怎么又到 GUI 里了。不如你描述一下你想做什么事情,这样大家可以对症下药。
    semut
        18
    semut  
       Apr 24, 2016
    @SelFree 实现是 shell ,场景是 GUI ,怎么感觉是做一个 git 的 gui 客户端啊
    bikong0411
        19
    bikong0411  
       Apr 24, 2016
    这是 shell 报的错,跟 git 无关
    lizheming
        20
    lizheming  
       Apr 24, 2016
    如果是添加的多,不想添加的只有几个,可以 git add . 之后然后 git reset file 。当然我更推荐的是使用 git add -i 进入交互模式,可以自行选择需要 add 的文件,非常方便。
    owlsec
        21
    owlsec  
       Apr 24, 2016   ❤️ 1
    .gitignore
    xiamx
        22
    xiamx  
       Apr 24, 2016
    echo "<file1> <file2> <filen>" | xargs git add --
    327beckham
        23
    327beckham  
       Apr 24, 2016
    你既然能整理出<file1> <file2> <file3> 。。。。这么长的列表,那就再弄一个 bash 脚本,内容是:
    git add <file1>
    git add <file2>
    git add <file3>
    ......
    lua
        24
    lua  
    OP
       Apr 24, 2016
    @Bardon @owlsec .gitignore 值得一试,简单粗暴直截了当
    mengzhuo
        25
    mengzhuo  
       Apr 24, 2016
    shell 的问题怎么能怪 git 呢
    楼主的结构有问题了吧
    sunjourney
        26
    sunjourney  
       Apr 24, 2016 via iPhone
    这么多文件真的是项目文件吗?什么东西的源码会这样?编译后的东西不要同步了好吧?
    Clarencep
        27
    Clarencep  
       Apr 24, 2016
    如果不想提交的文件比较少,可以先 `git add .` 然后使用 `git reset HEAD 不想提交的文件` 来排除
    Ixizi
        28
    Ixizi  
       Apr 24, 2016
    把要改的随便加点注释之类的,然后 git add -u
    Kirscheis
        29
    Kirscheis  
       Apr 24, 2016 via Android
    这是 shell 的问题,和 git 没关系。 echo " " | xargs git add -- 就好了
    wizardoz
        30
    wizardoz  
       Apr 24, 2016
    同觉得问题不存在,不想 commit 的文件不要 add 就行了,又要 add 又不想 commit 的理由是什么?
    skydiver
        31
    skydiver  
       Apr 24, 2016 via iPad
    @mengzhuo 楼主的结构有问题, 23333
    itfanr
        32
    itfanr  
       Apr 24, 2016
    git add -A
    kxxoling
        33
    kxxoling  
       Apr 24, 2016
    git add . ;git rm xxx --cached?
    kxxoling
        34
    kxxoling  
       Apr 24, 2016
    没提交的话 git add .; git reset xxx 应该也行。话说这么多文件就不能用通配符?
    xwartz
        35
    xwartz  
       Apr 24, 2016
    git add --all
    marcushbs
        36
    marcushbs  
       Apr 24, 2016
    function gc {
    for f in `git status |grep modified|awk '{print $3}'`
    do
    git add $f
    done
    git commit -m "$1"
    git push
    }
    billlee
        37
    billlee  
       Apr 24, 2016
    你需要 xargs
    hzlzh
        38
    hzlzh  
    PRO
       Apr 24, 2016
    之前做 temp.im 这个服务的时候尝试过 push 100w 个文件到 github 上,是分批进行的, github 有做限制。
    via https://study.congcong.us/t/57477
    后来换七牛 CDN 来存了
    BOYPT
        39
    BOYPT  
       Apr 24, 2016
    命令行长度是内核限制来的。跟 git 无关
    bicoff9527
        40
    bicoff9527  
       Apr 24, 2016
    奇怪的想法,大概是对 git 不熟
    Haku
        41
    Haku  
       Apr 24, 2016
    too many arguments 是指参数太多,也就是命令用错的意思....
    tsl0922
        42
    tsl0922  
       Apr 24, 2016
    如果想忽略当前 index 内容只提交特定文件可以使用: git commit --only -m <msg> -- <file>...
    strwei
        43
    strwei  
       Apr 24, 2016
    git add -A
    mhtt
        44
    mhtt  
       Apr 24, 2016 via iPhone
    git add -A ?
    cheerzeng
        45
    cheerzeng  
       Apr 24, 2016
    如果是同类文件,以 python 文件为例,可以 git add *.py
    至于 commit ,跟 add 几次没关系啊
    pynix
        46
    pynix  
       Apr 24, 2016
    分成 2 批。。。
    wensonsmith
        47
    wensonsmith  
       Apr 24, 2016
    git add -A
    starcraft
        48
    starcraft  
       Apr 24, 2016 via iPhone
    今天也碰到了添加的问题 刚好搜了研究下-A 的命令
    kirisetsz
        49
    kirisetsz  
       Apr 24, 2016
    这个是 shell 或者系统调用的限制解法嘛,把结果导入 xargs 转换一下吧 find . -print0 -type f | xargs -n1 git add -- 这样。
    busyluo
        50
    busyluo  
       Apr 25, 2016 via iPhone
    用 gitgit stage 添加要提交的文件

    http://m.blog.csdn.net/article/details?id=50357277
    chuxiwen
        51
    chuxiwen  
       Apr 25, 2016 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
    allenforrest
        52
    allenforrest  
       Apr 25, 2016
    感觉是做文件云同步,底层机制用 git 实现
    darasion
        53
    darasion  
       Apr 25, 2016
    是 shell 的限制。即便你不用 git ,删除这么多文件也是有问题的。

    一般命令行参数太多了或者不能预期是多少的时候,都得用 xargs 命令展开一下。
    SmiteChow
        54
    SmiteChow  
       Apr 25, 2016
    顶楼上,楼上说的展开就是走管道,妥妥的没问题
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   916 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 120ms · UTC 18:48 · PVG 02:48 · LAX 11:48 · JFK 14:48
    ♥ Do have faith in what you're doing.