2016-09-28 8 views
0

私はSVNリポジトリをGitリポジトリに移行しようとしています。リポジトリ内のすべてのブランチに対して.gitignoreを作成するには?

私が移行したら、SVNブランチとタグをGitブランチとタグに変換します。

しかし、次のコマンドを使用してすべてのブランチに.gitignoreを追加しようとしました。常に現在の作業ブランチに追加されます。

git svn show-ignore > .gitignore 

コマンド実行時の現在の分岐ではなく、すべての分岐に対して.gitignoreを追加するにはどうすればよいですか。

答えて

0

枝を繰り返して、cherry-pickを使ってgitignoreファイルを含むコミットを適用することができます。

あなたはこのようなスクリプト(git-apply-to-all-branches.sh)を使用することができ

#!/usr/bin/env bash 

sha=$1 

# get current branch name 
# http://stackoverflow.com/a/1593487/1401409 
branch_name="$(git symbolic-ref HEAD 2>/dev/null)" || 
branch_name="(unnamed branch)"  # detached HEAD 
branch_name=${branch_name##refs/heads/} 

# iterate over all branches 
git for-each-ref refs/heads | cut -d/ -f3- | while read branch; 
do 
    # skip current branch 
    [ $branch == $branch_name ] && continue 

    git checkout $branch 
    git cherry-pick $sha 
done 

そして、あなたはちょうどあなたが呼び出すことができる現在のブランチにごgitignoreを犯したと仮定すると:

./git-apply-to-all-branches.sh <sha_of_your_gitignore_commit> 
+0

チェリーピックなしでスクリプトを書くことができますか? – virendrao

+0

別のオプションは、ドキュメントに示唆されているように、show-ignoreの出力を.git/info/excludeに置くことです。 https://git-scm.com/docs/git-svn#_basic_examplesそれで、それをコミットする必要はありません。 – loopkin

+0

しかし、この影響はローカルリポジトリに残ります。リモートリポジトリにプッシュすると、他の開発者がプルして、無視されたファイルを含むコードをプッシュすると、正しく動作しません。 – virendrao

関連する問題