git clone, ignoring a directory

后端 未结 4 1588
名媛妹妹
名媛妹妹 2020-11-30 03:31

I\'m trying to test something on a wordpress install. In doing so, I\'d like to quickly replicate the repo. However, the upload directory (wp-content/uploads) i

相关标签:
4条回答
  • 2020-11-30 04:14

    On the server:

     git checkout master^0    # the ^0 checks out the commit itself, not the branch
     git filter-branch --tree-filter 'git rm -r wp-content/uploads' HEAD
     git checkout -b filtered
    

    (filter-branch on a big project here generates new history at about 2-3 commits per second)

    Then, anywhere you like,

     git init
     git remote add gimme your://repo/path
     git fetch gimme filtered
    

    edit: fixed syntax errors according to http://git-scm.com/docs/git-filter-branch

    0 讨论(0)
  • 2020-11-30 04:15

    A bit late to the party, but: Don't you want a sparse checkout?

    mkdir <repo> && cd <repo>
    git init
    git remote add –f <name> <url>
    

    Enable sparse-checkout:

    git config core.sparsecheckout true
    

    Configure sparse-checkout by listing your desired sub-trees in .git/info/sparse-checkout:

    echo some/dir/ >> .git/info/sparse-checkout
    echo another/sub/tree >> .git/info/sparse-checkout
    

    Checkout from the remote:

    git pull <remote> <branch>
    

    See http://jasonkarns.com/blog/subdirectory-checkouts-with-git-sparse-checkout/ for more info.

    0 讨论(0)
  • 2020-11-30 04:23

    you can specify the depth to clone (--depth=1 to get only 1 commit). You may want to set up a branch with this directory missing and then clone with depth of one only. Since git is snapshot based, it's not easy to exclude a part of a commit when cloning. This is the closest to what you want.

    If you have full control of this repo, you may want to make a submodule of this directory and only do a submodule update when you want to admin that part.

    0 讨论(0)
  • 2020-11-30 04:24

    git clone will always clone the complete repository*, including all previous commits ever added to the repository. So even if you remove the files temporarily, and clone it then, you will still receive the older versions which do contain those files.

    Also, just editing the .gitignore will not remove tracked files from the repository even if they would normally be ignored.

    So no, it is not really possible to skip a certain folder during cloning.

    *It is possible to limit the amount of commits retrieved during a clone, but this will not make the repository very usable.

    0 讨论(0)
提交回复
热议问题