2012-12-27 24 views
1

我對GitHub很新,但我現在用它來進行小型網站開發項目的本地版本跟蹤。假設我有一個包含一堆HTML,CSS和JS文件的項目,但也有一個用於訪問MySQL數據庫的PHP文件。 PHP文件包含我的MySQL憑證,包括密碼,所以顯然我不想公開這個文件。我想跟蹤本地項目的所有更改,包括PHP文件,但如果我想將項目聯機,我需要一些方法將此文件從同步中排除。是否可以忽略GitHub文件進行同步?

所以我的問題是:我可以忽略一個文件同步我的GitHub帳戶,同時仍在我的本地回購跟蹤?而且,如果我完全處於錯誤的軌道上,我很樂意聽到這個問題的更可靠的解決方案。謝謝!

+0

我不認爲這是可能的。您可以使用.gitignore,但這不會在您的本地回購中提交更改。 – asgoth

回答

2

有許多解決方案可以省略部分文件,但這些解決方案太複雜了,因爲當您剛剛開始使用git時。大多數技巧圍繞所謂的過濾器進化,這些命令在生產站點上解析並創建文件。但你不需要這些。

最簡單的技巧爲您提供了使應用程序更安全和更便攜的額外好處。

這樣更安全,因爲所有祕密數據都保存在一個可以獲得真正嚴格權限的文件中(以便能夠訪問例如FTP到代碼庫的人無法看到這些信用)。 它更便於攜帶,因爲它使您的團隊能夠以他們想要的方式在自己的開發機器上運行自己的憑證。例如有人使用XAMP可能會有不同的數據庫名稱,然後有人使用虛擬機或homebrewn腳本來管理他們的項目。

在服務器上,創建一個文件/path/only/www-data/has/read-access/secret.inc

<?php 
/** Hashing **/ 
define("SECRET_HASH", "hogwards"); 

/** Database **/ 
define("DB_USER", "harry"); 
define("DB_PASS", "alora"); 
?> 

然後,在你settings.php,或者你現在存儲這些creds ,:

<?php 
require("/path/only/www-data/has/read-access/secret.inc"); 
// Or slightly more portable 
// require("../etc/secret.inc"); 
?> 

您還可以檢查爲例secret.inc新合作者,secret.inc.example,具有定義,但具有空字符串作爲值。

現在您只需將settings.php與其他所有提交一起按即可。它會收集生產中發現的「secrets.inc」;使用例如服務器的登錄詳細信息。你的數據庫。

+0

是的,我認爲在PHP文件中使用數據庫證書的例子將是一個不好的練習例子..感謝您提供詳細的備選方案,以及針對git過濾器的提示。我一定會看看。 – bero80

0

您可以忽略在您的git存儲庫上被跟蹤的文件。對於類似的情況非常普遍。

在項目的根目錄中有一個名爲.gitignore的文件。在這個文件中,你把你不想跟蹤的文件的路徑放到git倉庫中。

請找到如何在使用一個完整的解釋:https://help.github.com/articles/ignoring-files

在你的情況,你將不得不手動發送這個「數據庫配置」文件到您的服務器。

+0

我確實想跟蹤本地回購中的所有文件,我只是不想將它們全部同步。所以.gitignore在這裏沒有幫助。 – bero80

0

不,這是不可能的,但我確實認爲你做得不正確。將證書存儲在PHP文件中是一種不好的做法。您應該擁有一個包含設置的不同文件,但是這取決於您放置該設置文件的位置以及在存儲庫中存儲存根設置文件的重要性,您可能會遇到同樣的問題,但是在不同的文件中。

1

在省略某些內容的情況下推送提交是不可能的。這樣做會導致SHA1標識符發生變化,導致不同的提交。

您可以在一個分支上進行公共開發,然後將這些更改合併到另一個分支,在該分支中跟蹤需要保持私有的配置信息。由於您可以在執行未提交的更改時切換分支,因此您甚至可以執行大部分開發和測試,只需切換到公用分支進行提交,然後切換回來併合並這些更改。

但是,當推動只推動你的公共分支而不是私人分支時,你需要小心。總的來說,將不想推入的信息保存在一個小的單獨文件中是完全可以放心忽略的。

相關問題