代码之家  ›  专栏  ›  技术社区  ›  zaf

没有Git元数据的Tarballing

  •  44
  • zaf  · 技术社区  · 14 年前

    我想我可以尝试使用find/egrep/xargs/tar的组合,但是tar文件包含了.git目录和*.log文件。

    这就是我所拥有的:

    find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar
    

    有人能解释一下我的误解吗?为什么tar要处理find和egrep正在过滤的文件?

    10 回复  |  直到 7 年前
        1
  •  104
  •   Yuri    4 年前

    当文件的数量增加到一个以上时,您将得到一个令人讨厌的惊喜 xargs 命令:然后您将首先为第一个文件创建一个tar文件,然后用其余的文件覆盖同一个tar文件。

    GNU公司 tar --exclude 解决此问题的选项:

    tar cvf ~/app.tar --exclude .git --exclude "*.log" .
    
        2
  •  57
  •   Peter Mortensen Leslie    7 年前

    您可以直接尝试使用tar选项--exclude vcs:

    --exclude-vcs:
              Exclude version control system directories
    

    例如:

    tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs
    

    它适用于Git。

        3
  •  15
  •   jkramer    14 年前

    尝试以下操作:

    git archive --format=tar -o ~/tarball.tar -v HEAD
    

        4
  •  12
  •   PeloNZ    12 年前

    tar --exclude-vcs

    这将排除svn、git元文件等。

        5
  •  4
  •   Peter Mortensen Leslie    7 年前

    这将教会我如何在冗长的调试中淹没重要的消息。

    这样做有效:

    find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
    
        6
  •  4
  •   Peter Mortensen Leslie    7 年前

    较新的GNU tar可以通过使用标志--exclude vcs自动排除版本控制目录。这会搞定的。吉特也是。

        7
  •  2
  •   Jürgen Steinblock    14 年前

    你不用grep也能做到。发现是强大的

     find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
    
        8
  •  2
  •   Peter Mortensen Leslie    7 年前

    git-archive 可能就是你要找的。

        9
  •  1
  •   Peter Mortensen Leslie    7 年前

    从应用程序目录外执行此操作:

    tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/
    
        10
  •  0
  •   Ricky Levi    7 年前

    对我来说 .gitignore 我需要的是内容:

    tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT

    --exclude-from