私のpythonプログラムではインデントにタブを使用していますが、代わりにスペースを使用するユーザーと(gitを使用して)共同作業をしたいと考えています。
gitがプッシュ/フェッチ時にスペースとタブ(たとえば、4つのスペース= 1つのタブ)を自動的に変換する方法はありますか?(CR / LF変換と同様)
私のpythonプログラムではインデントにタブを使用していますが、代わりにスペースを使用するユーザーと(gitを使用して)共同作業をしたいと考えています。
gitがプッシュ/フェッチ時にスペースとタブ(たとえば、4つのスペース= 1つのタブ)を自動的に変換する方法はありますか?(CR / LF変換と同様)
回答:
ここに完全なソリューションがあります:
リポジトリに、以下.git/info/attributes
を含むファイルを追加します。
*.py filter=tabspace
Linux / Unix
次にコマンドを実行します。
git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'
OS X
まず、brewでcoreutilsをインストールします。
brew install coreutils
次にコマンドを実行します。
git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'
すべてのシステム
これで、プロジェクトのすべてのファイルをチェックアウトできます。あなたはそれを行うことができます:
git checkout HEAD -- **
そして、すべてのpythonファイルはスペースではなくタブを持つようになります。
編集:強制チェックアウトコマンドを変更しました。もちろん、最初に作業をコミットする必要があります。
homebrew
してから実行しますbrew install coreutils
)。
はい、可能な解決策の1つは、git属性フィルタードライバー(GitProブックも参照)を使用して、汚れ/クリーンメカニズムを定義することです。
そのように:
このフィルタードライバー(ここでは ' tabspace
' という名前)を.git/info/attributes
(Gitリポジトリ内のすべてのファイルに適用されるフィルターの場合)に次の内容で宣言できます。
*.py filter=tabspace
次にコマンドを実行します。
# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'
--global
フラグを削除する必要があります。これは、すべてのコラボレーションプロジェクトにスペースを送信することを意味するためです...
.gitattributes
ます。しかし、はい、構成がリポジトリのローカルに保持されている場合は理解しやすくなります。回答を編集しました。
~/.gitconfig
[filter "tabspace"]
smudge = unexpand --tabs=4 --first-only
clean = expand --tabs=4 --initial
[filter "tabspace2"]
smudge = unexpand --tabs=2 --first-only
clean = expand --tabs=2 --initial
次に、2つのファイルがあります。
attributes
*.js filter=tabspace
*.html filter=tabspace
*.css filter=tabspace
*.json filter=tabspace
そして attributes2
*.js filter=tabspace2
*.html filter=tabspace2
*.css filter=tabspace2
*.json filter=tabspace2
mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/
そうすれば、最終的にgithubに作業をプッシュしたときに8 space tabs
、すべてのブラウザーでのデフォルトの動作であるコードビューで馬鹿げて見えることはありません。
mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch
これにより、2 space indented
プロジェクトの通常のタブを操作できます。
もちろん4 space to 2 space
、私が発行したプロジェクトに貢献したい場合や、開発中に2つのスペースを使用する傾向がある場合は、変換用の同様のソリューションを作成できます。
.gitattributes
、リポジトリでファイルを使用(およびコミット)できることに注意してください
Windowsを使用している場合は、@ Olivier Verdierのソリューションを機能させるための追加の手順がいくつかあります。