2017-09-13 93 views
3

我有幾個存儲庫,我總是必須合併一個core存儲庫。 core存儲庫在每個存儲庫中均設置爲remote存儲庫。將git倉庫中的所有現有文件替換爲除.gitignore中的文件之外的其他遠程分支。

一般情況下,我的工作流程,以更新資料庫是這樣的:

git reset --hard origin/master 
git pull origin master 
git fetch core master 

我那麼做了git merge --squash core/master,推動資源庫回remote之前解決任何衝突。

這是好的,但它是一個有點多餘,因爲除了在.gitignore文件每個倉庫的一切,一切都在這些庫中,應當在技術上是一樣的core庫。

由於庫的數量擴大,我想知道拉core分支到這些庫的更有效的方式將給予什麼,我需要更換,除了特別是在.gitignore爲每一個提到的那些所有現有文件同時保持git歷史和日誌的完整性。

+0

不能使用[子模塊](https://git-scm.com/docs/git-submodule)? –

+0

你想'git checkout分支 - 文件...'也許? – o11c

+0

Git正在項目級別工作。除非您使用子模塊,否則無法爲特定文件「選擇」備用遠程設備。 –

回答

0

你可以用git和bash的組合來實現。我寫了一個示例腳本來展示如何完成它。你可以隨時修改它並使其更好。我也提供了一些解釋。該文件被稱爲adder.sh

#!/bin/bash 
# $1 -> Files from the branch you want (core) 
# $2 -> Branch you want to merge into (master) 

git checkout $2 
git diff --name-status $1..$2 | grep '^\(D\|M\)\s*' | cut -f2 > ~/.dummy 
git checkout $1 -- $(cat ~/.dummy) 
git add . 

要調用它,只需使用$ sh adder.sh core master。在此之後,core分支中的所有新添加和修改的文件都將添加到master回購。使用git狀態,您可以看到新增內容,然後進行相應的提交和推送。

$ git commit -m "Skipping Conflicts" 
$ git push 

一些解釋它是如何工作的:

$ git diff --name-status master..core 

產生以下輸出:

M  public/stylesheets/main.css    # Modified 
D  public/templates/createUser.html   # Present in core branch and not master (new file) 
A  public/templates/dashboard.html   # Present in master and not in the core branch (don't touch) 

所以寫一個簡單的正則表達式來只選擇修改,新文件和將其修改爲適當的格式,然後將其存儲在臨時文件中。

$ cat ~/.dummy 

public/templates/createUser.html 
public/stylesheets/main.css 

然後我們需要將這些文件添加到我們當前的分支,所以我們使用git checkout。有關如何使用git checkout,請參閱this answer


還有另一種方法可以做到這一點。官方的方式,使用git rerere。從the man page

在工作流程採用相對長期的特性分支,開發人員有時需要一遍又一遍地解決同樣的衝突,直到話題分行完成(或者合併到「釋放」分支,或發送並接受上游)。

此命令通過記錄初始手動合併衝突automerge結果和相應的手的決心的結果,以及應用先前記錄的手的分辨率爲它們相應的automerge結果有助於這個過程中的顯影劑。

注意:您需要設置,以使該命令rerere.enabled配置變量。

This article給出了一個體面的命令及其使用案例的概述。

+0

除非我做錯了,否則這不會保留原始存儲庫的git歷史記錄。它用核心存儲庫覆蓋它。 –

+0

@KamranKhan,是的,這是正確的。你應該冒險的第二個選項,如果你想保持提交歷史 – TheChetan

+0

@KamranKhan,我今天通過git合併文檔,我發現[這個答案](https://stackoverflow.com/a/13307342/4110233)上所以,看看它是否可以幫助你。 – TheChetan

相關問題