2016-12-16 67 views
2

我不知道什麼是關於源代碼庫協議緩衝區中的最佳實踐(如GIT):只將.proto協議緩衝區文件放入存儲庫中?

我必須把只有.proto文件中的信息庫,並讓其他人誰使用源代碼來重新生成類代碼用protoc編譯器?或者是將protoc文件和protoc編譯器生成的源代碼放在一起的最佳實踐?

回答

2

如果你能避免它,你永遠不應該檢入生成的代碼。

如果您在生成的代碼檢查,你承擔多種風險,如:

  • 你可能失去的是如何正確地重新生成代碼的知識。如果它不是作爲構建的一部分而自動執行的,則很容易忘記文檔或使文檔錯誤。
  • 您可能會冒生成代碼與模式不同步的風險。例如,有人可以對.proto文件進行更改,但忘記更新生成的代碼。他們的變化實際上不會「生效」,直到其他人以後由於其他原因重新生成生成的代碼 - 然後突然間他們看到了他們並不期待的副作用。
  • 您生成的代碼可能與協議緩衝區的版本不同,該版本的協議緩衝區與生成器安裝的版本不同。在這種情況下,它將無法正常工作,因爲有必要使用完全相同版本的編譯器和運行時庫。

如果由於某種原因,你絕對有生成的代碼來檢查,我強烈建議創建一個自動化測試,檢查,如果簽入的代碼相匹配什麼,如果運行新的protoc將產生。 (例如,protobuf存儲庫本身包含descriptor.proto的生成代碼的簽入副本,因爲需要編譯protoc以創建循環依賴關係,但需要執行單元測試,以檢查登錄的代碼是否與protoc會匹配生成)。

0

如果您的項目通常以其源代碼形式(例如,每個用戶應該編譯自己的庫或程序)使用,我會提供具有生成的文件的可用發行包。

但我不會把生成的文件直接放入存儲庫。如果大多數用戶使用編譯後的二進制文件,提供易於編譯的源文件包也不是那麼重要。 protobuf生成器然後成爲另一個生成依賴項。