kontrol versi baris perintah dengan Java yang menangani banyak direktori bersarang

Menggunakan baris perintah git dengan Java. Proyek kami memiliki banyak sekali paket bersarang yang tentu saja berarti banyak direktori bersarang.

Mengetik direktori ini pada baris perintah menjadi PITA dan tampaknya tidak dapat dihindari untuk operasi non-sehari-hari tertentu seperti "git rm". Terutama ketika saya memindahkan barang-barang di Eclipse kemudian perlu mengejar ketinggalan di baris perintah, tetapi file-file tersebut tidak ada lagi (tidak dapat menggunakan ekspansi shell atau *). Selain itu, perluasan shell tidak memperhitungkan file yang diabaikan, dan mengirimkan file yang diabaikan ke perintah git menyebabkan perintah dibatalkan (seharusnya). Tidak tertarik dengan integrasi IDE karena alasan di luar cakupan pertanyaan ini.

Adakah yang punya pemikiran untuk membuat ini lebih mudah?

Saya menggunakan win7/powershell, tetapi saya terbuka untuk saran menggunakan bash atau batch juga.


person Dustin Getz    schedule 26.01.2011    source sumber
comment
Tidak tahu dari atas kepalaku. Namun bagaimana dengan membuat variabel lingkungan untuk lokasi yang paling sering digunakan?   -  person ring bearer    schedule 26.01.2011
comment
struktur direktori terlalu dalam, terlalu banyak lokasi   -  person Dustin Getz    schedule 26.01.2011
comment
Harus saya akui saya tidak terlalu memahami masalahnya-- jika Anda telah menghapus direktori dan perlu menyinkronkannya ke git, Anda cukup melakukan git add -A topdir dan itu akan menghapusnya secara rekursif dari indeks. Sebenarnya Anda bisa melakukannya git add -A . dan itu akan menyinkronkan indeks dengan direktori kerja Anda... apakah itu kurang selektif?   -  person araqnid    schedule 26.01.2011


Jawaban (6)


Tidak terbiasa dengan win7/powershell. Dengan asumsi nama kelas Anda unik, di bash Anda dapat menemukan file dengan

find . -name SomeFile.java

Kemudian Anda bisa "git rm" dengan mereka

git rm $(find . -name SomeFile.java)

Tentu saja, jika Anda tidak ingin mengetik "find .-name" setiap kali, Anda dapat membuat fungsi di .bashrc untuk menyederhanakannya. Apakah PowerShell mendukung hal serupa? Jika tidak, bagaimana dengan mencari cygwin, yang memungkinkan Anda menjalankan bash?

DIEDIT

Jika nama kelas Anda tidak unik, pendekatan ini tidak akan berhasil.

person Clint Miller    schedule 26.01.2011
comment
Juga, IDE apa yang Anda gunakan? Apakah ada integrasi dengan git? - person Clint Miller; 26.01.2011

Saya belum pernah menggunakan git sebelumnya, tapi saya menggunakan Perforce. Saya berasumsi Anda perlu mereferensikan sejumlah direktori dan Anda tidak dapat menggunakan wildcard karena alasan tertentu. Kemudian di PowerShell, Anda bisa menggunakan konstruksi seperti ini:

## Find all directories named "test*"
dir * -inc test* -r | ? {$_.PSIsContainer} | % {git <some command> $_.FullName}

## Find all files and directories named "test*.*"
dir * -inc test*.* -r | % {git <some command> $_.FullName}

Anda juga bisa menulis fungsi wrapper untuk mempermudahnya. Inilah sesuatu untuk membantu Anda memulai.

Function git {
    param(
        [Parameter(Position = 0, Mandatory = $true)]
        [String]$Command
        ,
        [Alias("PSPath")]
        [Parameter(Position = 1, ValueFromPipelineByPropertyName = $true)]
        [String[]]$Path
    )

    process {
        if ($Path) {
            $Path | {git.exe $Command $_}
        } else {
            git.exe $Command
        }
    }
}
person JasonMArcher    schedule 26.01.2011

Saya tidak tahu tentang git add -A -- dan setelah menggunakan ini selama beberapa hari saya tidak lagi merasa frustrasi. Akan melaporkan kembali.

person Dustin Getz    schedule 28.01.2011

Jika Anda ingin menghindari pengetikan semua jalur, Anda dapat menggunakan TortoiseGit dan melakukan pengelolaan melalui sebuah GUI.

Saya juga suka menggunakan baris perintah, tetapi jika menyangkut kasus tertentu (misalnya mengembalikan 20 file sekaligus), saya merasa lebih mudah untuk memeriksa file di dialog pengembalian dan cukup klik ok. Bagi saya, TortoiseGit bukanlah pengganti konsol Git namun merupakan ekstensi yang sangat nyaman untuk konsol tersebut.

Sayangnya, kasus penggunaan yang Anda sebutkan (menghapus banyak file sekaligus) tidak dapat dicapai dengan TortoiseGit. Jika saya harus menghapus banyak file sekaligus, saya akan meminta git untuk memberi tahu saya file mana yang sedang diversi (git ls-files), masukkan daftar itu ke dalam file, edit, lalu lakukan git rm untuk setiap file yang tersisa di file yang diedit.

person eckes    schedule 28.01.2011

Sudahkah Anda mencoba EGit? Ini bukan UI git paling spektakuler yang pernah Anda lihat tetapi jika Anda sudah menggunakan gerhana, ini akan membuat beberapa hal lebih mudah. Menyenangkan juga melihat ikon mini kecil di Eclipse sendiri yang menunjukkan file mana yang telah berubah dan mana yang tidak.

person MatrixFrog    schedule 29.01.2011

Sudahkah Anda mencoba git gui yang digawangi git? Biasanya disertakan dengan git dan sangat membantu untuk menampilkan banyak file dengan cepat.

person ordnungswidrig    schedule 28.01.2011
comment
Menurutku itu tidak mungkin. Apakah maksud Anda git gui? - person MatrixFrog; 30.01.2011