2011-08-18 4 views
1

TeamCityで実行されるAntビルドスクリプトの内部でこれを使用します。ファイル拡張子を持つファイルとその親フォルダだけをgitでチェックアウトするにはどうすればよいですか?

+0

これまでに何がありますか? – alex

+0

現在、Subversionを使用しています(すぐにGitに移行します)、SVNリポジトリの大きなスラブ(ディレクトリのリスト)をチェックアウトし、Antファイルパターンを使用して検索する必要があります。動作は遅いです。 –

+0

AFAIK Subversion APIは、このタイプのパターンベースの検索とチェックアウトをサポートしていません。私は最新のv1.7をチェックしていませんが、とにかくGitに移行しています。以前は、パターンベースのチェックアウトのリクエストをSubverisonチームに提出しましたが、Gitが既にそれを行ったかどうかは不思議でした。代わりに、gitコマンドを生成することに基づく別の方法があります。 –

答えて

1

をビルドスクリプトがそれを更新していて、あなたがしたいだけのファイル

  • をコピーこれは何ですか私はしたし、それはかなりうまく動作します。プロジェクト内のマークダウン(拡張子.md)ファイルのみを編集する必要がありました。

    #clone as usual 
    git clone https://github.com/username/repo.git myrepo 
    
    #change into the myrepo directory that was just created 
    cd myrepo 
    
    #turn off tracking for everything 
    #this allows us to start pruning our working directory without the index 
    #being effected, leaving us only with the files that we want to work on 
    git ls-files | tr '\n' '\0' | xargs -0 git update-index --assume-unchanged 
    
    #turn on tracking for only the files that you want, editing the grep pattern 
    # as needed 
    #here I'm only going to track markdown files with a *.md extension 
    #notice the '--no-assume-unchanged' flag 
    git ls-files | grep \\.md | tr '\n' '\0' | xargs -0 git update-index --no-assume-unchanged 
    
    #delete everything in the directory that you don't want by reversing 
    #the grep pattern and adding a 'rm -rf' command 
    git ls-files | grep -v \\.md | tr '\n' '\0' | xargs -0 rm -rf 
    
    #delete empty directories (optional) 
    #run the following command. you'll receive a lot of 'no such file or 
    #directory' messages. run the command again until you 
    #no longer receive such messages.you'll need to do this several times depending on the depth of your directory structure. perfect place for a while loop if your scripting this 
    find . -type d -empty -exec rm -rf {} \; 
    
    #list the file paths that are left to verify everything went as expected 
    find -type f | grep -v .git 
    
    #run a git status to make sure the index doesn't show anything being deleted 
        git status 
    

    あなたが表示されるはずです。

    行わ
    # On branch master 
    nothing to commit, working directory clean 
    

    と同じようにこれらのファイルを操作することができます。リモートにプルしたりプッシュしたりするなど、すべてをチェックアウトしています。 チェックアウトしたファイルのみを削除して更新します。

  • +0

    非常にクールです。ありがとう! –

    1

    (「チェックアウト」とは、私はあなたがgitの用語で「クローン」を意味することを前提とは - あなたは現在のリポジトリのコピーを持っていない、すなわち、リモートリポジトリからいくつかのファイルを取得する必要があります。)

    短い答えはできないということです。

    あなたは、いくつかの制限付きで、浅いクローンにはgitでを行う(唯一の最後のいくつかのバージョンを取得する)ことができますが、簡単なものとして、リポジトリの一部だけを、つかむ狭いクローンを(行うことができませんサブディレクトリ、または特定の条件に一致するファイルのみ)。

    これは実際には分散バージョン管理システムとしてのgitの機能です。リポジトリをクローンしたときに、完全な履歴、すべてのブランチ、作業に必要なものコード上で完全にスタンドアロン。

    例えば、この周りに、もちろん、さまざまな方法があります:

    1. あなたはtar -x --wildcards --no-anchored '*.whatever'
    2. にちょうど完全なクローンを作成することをタールリモートリポジトリのアーカイブ、およびパイプを取得するためにgit archive --remote=<repo>を使用することができますローカルにどこかのリポジトリ、およびなどなど
    +0

    ありがとうございました。私はGITが意図していたことに対して、私が求めているのは「穀物」に反対していることを認識しています。私は、TeamCityがGITのクローニングとどのように機能するかについていくつかの宿題をする必要があります。私はあなたがこの文脈で役に立つと思うと思う。 –

    関連する問題